我經常處于以下情況:我正處于一個復雜的操作中,我想嘗試兩種或多種從這里開始的方法。所以我可能會添加并提交,現在我可以在一個或多個分支上嘗試我的各種策略。
但問題是:我不想忘記到目前為止我在這個分支上對HEAD. 為什么?好吧,在我正在編碼的 IDE 中,代碼編輯器的邊緣有非常有用的“更改條”,它們標記了所有分階段和非分階段的更改。我不想失去那些更改欄。實際上,他們正在回應的是diff作業樹和HEAD.
所以你看,我想保存我所有的作業,以便以后有一個穩定的點可以在需要時回傳,但我不希望這影響HEAD、索引和作業樹的狀態。實際上,我希望做出“只是一個副本”的提交,而不改變有關宇宙的任何其他內容。
這是一個圖表。我有這個:
A -- B -- C -- (mybranch) [and I've edited files X, Y, and Z with respect to C]
我要這個:
D? something that preserves the state of files X, Y, and Z
/
A -- B -- C -- (mybranch) [and X, Y, and Z are still _modified_ with respect to C]
基本上我想要做的是將事物的狀態復制到提交中,而不是有效地檢查該提交。有沒有這樣的命令?
到目前為止我發現的是這樣的事情:
git switch -c temp
git commit -m 'hold my place just in case'
git switch -
git restore --source temp --worktree --staged -- .
但老實說,我并不喜歡它。不知何故,感覺很冒險。我認為,我更喜歡的是某種形式,git stash push它不會改變索引和作業樹的狀態。
uj5u.com熱心網友回復:
git commit保留當前索引和作業樹,它唯一要做的另一件事是更新 HEAD 以指向新的提交。
git stash -k從您當前的索引和作業樹中進行一些新的提交,但您不需要臨時作業樹快照,通過執行普通提交并重新掛起HEAD標簽來跳過它,
git commit
git tag snap
git reset --soft @^
或者直接做,
git tag snap $(git commit-tree -p @ -m snap `git write-tree`)
然后您可以隨時挑選并丟棄快照。
uj5u.com熱心網友回復:
git stash實際上有允許“隱藏而不清除更改”的子命令:
git stash create # creates the same commits as 'git stash push",
# but don't store them
git stash store <sha> # adds commit <sha> in the stash list
您可以創建一個別名:
git config --global alias.snap '! git stash store $(git stash create)'
檢查git help stash更多詳細資訊(例如:您可以添加git stash store -m "..."以添加自定義訊息...)
相對的好處git commit-tree $(git write-tree)是:git stash create還將未暫存的內容保存在修改后的檔案中。
另請注意,這git stash store基本上git update-ref refs/stash與一些標準化選項有關,并且存盤串列只是refs/stash.
如果您想以其他名稱存盤這些型別的快照,您可以使用:
git update-ref -m "spapshot while working on '$commitmsg'" --create-reflog \
refs/snap $(git stash create)
并檢查git reflog snap以獲取您的“快照”串列。
uj5u.com熱心網友回復:
確實,似乎有這樣一種形式git stash push——即,--keep-index(或-k)。我能夠通過說來實作我正在尋找的東西
git stash push -k -m 'hold my place while working on the progress bar'
所以現在我可以繼續作業,如果我需要回傳到當前狀態,我大概可以重新設定并應用該存盤。
(很難發現這一點,因為--keep-index檔案中描述的效果相當模糊,所以我花了一段時間,做了很多準備,才鼓起勇氣嘗試它。)
uj5u.com熱心網友回復:
git write-tree您還可以直接執行管道命令git commit-tree:
git branch rememberme $(git commit-tree $(git write-tree) -p HEAD)
可以輕松地包裝在別名中,以使分支名稱成為用戶輸入或用于push創建中間步驟的歷史記錄。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/483503.html
標籤:混帐
下一篇:GIT中提交的父母和孩子的數量
