簡體   English   中英

git stash 是特定於分支的還是針對整個存儲庫的?

[英]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 commitgit reset正確使用可以模擬特定分支的git stash

下面是一個常見的現實場景,演示了commitreset命令的值和用法:

  • 你在功能分支 X 上工作,你的代碼甚至沒有編譯或通過測試
  • 存在比當前新功能優先級更高的錯誤,因此您必須立即開始修復錯誤
  • 而不是做一個 git stash (並且 stash 在混合中丟失了,因為你有很多 stash 和許多分支)
  • 您可以在功能分支 X 上執行git commit
    • 寫下COMMIT_HASH_VALUE以備后用
  • 簽出一個新的分支 Y 以進行熱修復
  • 完成分支 Y 上的熱修復(做一個合並請求將熱修復進入基線並刪除熱修復分支)
  • 然后再次檢出功能分支 X
  • 彈出未編譯或未通過測試的未完成工作 --> 只需執行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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM