[英]Is git stash branch-specific or for the whole repository?
我走進一家分店,做了一些工作。 我想進入另一個分支但不想提交所以我做了git stash
。 然后我做了git checkout <otherbranch>
。 我在那里做了一些工作,就像在第一個分支中一樣,我想在提交工作之前退出它。 所以我也在那里做了git stash
。 我切換回第一個分支並嘗試取消它( git stash pop
),認為它會從該特定分支獲取存儲。 我很驚訝它從<otherbranch>
取出了藏匿處(最新藏匿處)。 我的印象是 stash 是特定於分支的,但這種行為表明整個本地存儲庫只有一個 stash。
git stash
是特定於分支的還是針對整個存儲庫的? 如果是針對整個存儲庫,我可以將選項傳遞給它以使其特定於分支嗎?
不,不。 git stash 是每個存儲庫。
這是一個關於如何使用它的不錯的頁面。
要查看當前的存儲堆棧:
git stash list
要從堆棧中選擇特定的存儲,請通過上面顯示的stash@{ number }
引用它。
如果您希望行為是針對每個分支的,您只需在分支上進行一次提交(或多次提交)。 您可以稍后“取消”提交(例如,使用git reset
, --soft
或--mixed
;請參閱git reset 文檔;或使用git rebase -i
僅保留最終的“真實”提交( s) 同時丟棄臨時文件)。
(要真正模擬git stash
您至少需要兩次提交,一次用於索引狀態,一次用於工作樹狀態。不過,如果您不打算保存和恢復索引狀態,則可以git add -A
整個工作樹狀態並將其放在臨時提交中。或者, git stash
是一個 shell 腳本,因此您可以很容易地復制和修改它以使其默認在每個分支上工作,例如使用refs/pb-stash/ branch
作為其工作命名空間,而不是整個refs/stash
的單個全局refs/stash
。您仍然可以通過顯式命名將存儲從一個分支帶到另一個分支。)
git stash
不是每個分支。
git stash
(當你有很多git stash
和分支時,它很容易丟失)git commit
以將未完成的代碼保存在您的分支中,當您准備好完成代碼時,執行git reset ${COMMIT_HASH_VALUE}
以取回未完成的代碼git commit
和git reset
正確使用時可以模擬特定分支的git stash
下面是一個常見的現實場景,演示了commit
和reset
命令的值和用法:
git commit
COMMIT_HASH_VALUE
以備后用git reset ${COMMIT_HASH_VALUE}
(僅供參考, git reset
的默認值是--mixed
)
我不確定為什么這里的每個答案都建議使用commit
+ reset
模擬 stash 。 Stash 非常好用。
所以這里是 stash 工作流程:
每當您必須切換分支而您還沒有准備好提交時,請將您的更改保存到堆棧中
git stash save "Your custom stash message"
(如果您不想要自定義消息,只需使用git stash
)。
當你返回一個分支時,檢查存儲
git stash list
如果您在分支FixIssue0203
您可以使用git stash pop
因為這將應用頂部stash@{0}
並將其從 stash 中刪除。
但是,如果您在分支ImproveReadme
您應該首先應用 stash 1 git stash apply stash@{1}
然后從堆棧中刪除 stash 1 git stash drop stash@{1}
。
就是這樣!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.