[英]Git: Is there a way to git stash but be able to specify a branch name?
我正在進行一些更改,但我不確定。 他們可能是正確的前進方式,但也許我走錯了路。 我想保存我的工作,以防萬一我做正確的事情,但現在不繼續這條開發線,例如回到半小時前的位置。 基本上,做一個 stash 但讓 stash 提交一個具有描述性名稱的真實分支。
就像是
git stash save-stuff // not a valid command
我一直在做的需要多個命令
git commit -a -m 'not sure this is where I want to go'
git checkout -b save-stuff
git checkout original-branch // return to original branch
git reset --hard HEAD~1 // I don't always do this one.
這讓我很不高興。
Git 歷史總是分層的,這也適用於git stash
。 git stash
創建一個新的提交,相對於一個特定的提交,而不是一個分支。 因此,無需使用特定名稱保存 Git 存儲; 這樣做,你實際上是在創建一個分支。
如果您希望能夠保存您不確定是否正確的臨時工作,最好的辦法是使用分支。 這樣做將允許您和在存儲庫上工作的其他任何人(如果您將分支推送到原點)能夠輕松地參考該時間點。 如果發現您的方法是正確的,您可以對該分支進行后續更改,甚至可以壓縮更改以使其看起來有問題的提交從未存在過。
請記住,沒有什么可以阻止您檢查單個提交- 即使在您當前正在處理的分支上也是如此。 這將允許您在需要時恢復,並且您可以從這個舊提交繼續工作,如果需要,甚至可以推送到同一個分支。
兩個步驟:
git stash
有一個子命令git stash create
,它基本上創建與git stash
相同的提交,但不會更新存儲並且不會觸及您的索引或工作樹git update-ref
允許您“更新”一個引用(例如:分支)而不是當前活動分支您可以在腳本中將兩者結合起來:
# file git-snap:
#!/bin/bash
if git diff -s --exit-code HEAD; then
echo " --- worktree is clean, nothing to save"
exit 0
fi
# get name of active branch, to update a branch named wip/<branch> :
branch=$(git rev-parse --abbrev-ref HEAD)
ref="refs/heads/wip/$branch"
# call git stash create:
sha=$(git stash create)
# update a branch named 'wip/<branch>' :
git update-ref -m "save wip on $branch" "$ref" "$sha"
git log --oneline -1 "$ref"
(如果你把上面的git-snap
腳本放在你的 PATH 上,你可以簡單地調用git snap
)
或者如果你喜歡一個班輪:
git update-ref refs/heads/mystash $(git stash create)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.