首先回答標題中的問題:
應用藏匿的變化是從什麼櫻桃採摘提交完全不同。
當您應用隱藏的更改時,存儲器中的更改將作爲未提交的編輯文件應用於工作樹中。
櫻桃挑選一個提交,就是說你想在一個指定的提交中應用「diff」到當前分支並進行提交。你基本上只是從任何地方選擇一個提交,並將其作爲當前分支上的下一個提交。例如,如果您在錯誤的分支上進行了一些提交,並且您希望稍後將它們選擇到正確的分支,那麼這很有用。
然後解釋兩個命令序列之間的差:
有相當一些差異。
git checkout some-branch
# (make some local changes)
git stash save
在實踐中是完全一樣:
git checkout some-branch
# (make some local changes)
git commit -a -m "My manually stashed away changes"
git reset --hard origin/some-branch
在這兩種情況下,你最終會停留在「一些分支」有沒有存在新的局部變化,但「藏」走。在第一種情況下,當你輸入「git stash list」時,隱藏的變化將會出現,而在第二種情況下,你將不得不運行「git reflog」來找到「隱藏」的變化。
在你的第一個案例(1)中,你之後做了一個「git stash pop」。它會直接撤消上一行(git stash save)。它會將隱藏的更改添加回本地工作樹,但不會添加任何新的提交。 HEAD仍將指向原來的「某個分支」。它還會從「git存儲列表」的輸出中刪除存儲條目。
在你的第二個案例(2)中,你做了一個「git cherry-pick SHA1」。這將直接撤銷前面的命令(git reset --hard)。你會得到提交。爲了得到相同的情況下,(1),你必須運行
git commit -a -m "too lazy to write a good messsage"
後「混帳藏匿彈出」
我們也可以說:
git checkout some-branch
# (make some local changes)
git stash save
git stash pop
是多還是少一樣:
git checkout some-branch
# (make some local changes)
git commit -a -m "My manually stashed away changes"
git reset origin/some-branch # without --hard
兩個基本上無所作爲(不考慮你得到「無法訪問」承諾,你會能夠在reflog中找到。請注意,無法訪問並不意味着您無法恢復它們。)
我有點困惑......它看起來像是在「將」更改「移動」到原來的位置,對嗎?在第一種情況下,你將變化存儲起來立即彈出;這沒有我能想到的淨效果。您仍然在工作樹中進行更改並未提交。在第二種情況下,除非你的分支在這個序列開始時先於原點,櫻桃選擇只是將變化「移動」到他們已經存在的位置......我在這裏錯過了什麼? –