我正在學習git reset
命令。`git reset HEAD`和`git reset HEAD〜'之間有什麼區別嗎?
我只是想知道,git reset HEAD
與git reset HEAD~
有什麼區別。
這些命令是通過兩種方式實現的嗎?或者它們之間只有在特定條件下才能觀察到的差異?
當我在相同情況下運行這兩個命令時,它們似乎表現相同,但爲了避免陷阱,我只是在問這個問題才能確定。
我正在學習git reset
命令。`git reset HEAD`和`git reset HEAD〜'之間有什麼區別嗎?
我只是想知道,git reset HEAD
與git reset HEAD~
有什麼區別。
這些命令是通過兩種方式實現的嗎?或者它們之間只有在特定條件下才能觀察到的差異?
當我在相同情況下運行這兩個命令時,它們似乎表現相同,但爲了避免陷阱,我只是在問這個問題才能確定。
如果您只有一個提交,它們是相同的,否則HEAD~
將始終引用提交的第一個父代。
此外,我可以建議一些有趣的閱讀git reset
。
git reset HEAD
unrolls to git reset --mixed HEAD
。從--mixed
的文檔,以便git reset HEAD~
將展開以git reset --mixed HEAD~1
這意味着Reset the HEAD's first parent with the --mixed option
--mixed 重置索引而不是工作樹(即更改的文件被保留,但不標記爲提交)並報告尚未更新的內容。這是默認操作。
我現在指的是非常好的博客條目git reset demystified。 注意事項:從這篇博客文章中,我終於明白了重置是如何工作的。
現在再來看看THAT圖並且意識到它做了什麼。它仍然解開了你的最後一次提交,但是也取消了一切。在你運行你所有的git add和git commit之前,你回滾到了。
運行
git reset HEAD~
git reset HEAD
第二命令沒有影響,因爲之後的第一個新的HEAD是以前HEAD〜。 看到
git rev-parse HEAD HEAD~ HEAD^@
注意git reset HEAD~
可以與
git reset [email protected]{n}
其中n可以通過git reflog
檢索一方面被撤消,git reset COMMIT
(的git reset --mixed COMMIT
當量)指:
HEAD
參考點COMMIT
COMMIT
樹(git reset
在Reset Demystified充分解釋)
在另一方面:
HEAD
表示當前承諾HEAD~
代表的HEAD
始祖(的~
含義的git revisions文檔中解釋,看一下例子在本節結束以更好地理解)
當你把兩個:
git reset HEAD
:簡單復位指數git reset HEAD~
:移動到以前的承諾和重置相應在這兩種情況下,您的工作目錄都不會受到影響。
'HEAD〜'是'HEAD'的第一個父項。確保你在repo中至少有兩個提交,你會看到更改。 – axiac
嗨@axiac,謝謝你的評論。因此,從你說的話來看,我猜'git reset HEAD'和'git reset HEAD ~'意思相同,即它們都意味着:使'HEAD'指針指向'HEAD'當前指向的提交的父提交至?我的理解是否正確? – Thor
編號'HEAD〜'與'HEAD'不同。 – axiac