2017-08-17 143 views
1

我正在學習git reset命令。`git reset HEAD`和`git reset HEAD〜'之間有什麼區別嗎?

我只是想知道,git reset HEADgit reset HEAD~有什麼區別。

這些命令是通過兩種方式實現的嗎?或者它們之間只有在特定條件下才能觀察到的差異?

當我在相同情況下運行這兩個命令時,它們似乎表現相同,但爲了避免陷阱,我只是在問這個問題才能確定。

+2

'HEAD〜'是'HEAD'的第一個父項。確保你在repo中至少有兩個提交,你會看到更改。 – axiac

+0

嗨@axiac,謝謝你的評論。因此,從你說的話來看,我猜'git reset HEAD'和'git reset HEAD ~'意思相同,即它們都意味着:使'HEAD'指針指向'HEAD'當前指向的提交的父提交至?我的理解是否正確? – Thor

+0

編號'HEAD〜'與'HEAD'不同。 – axiac

回答

2

如果您只有一個提交,它們是相同的,否則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之前,你回滾到了。

+2

'HEAD^1'與'HEAD'不一樣。 – axiac

+0

是的,我嘗試了一些東西后意識到了,我更新了我的介紹。你還好嗎或者其他提示? – ckruczek

+0

嗨ckruczek,感謝您的鏈接!我瞥了一眼,看起來很好。 – Thor

1

運行

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

2

檢索一方面被撤消,git reset COMMIT(的git reset --mixed COMMIT當量)指:

  1. 移動HEAD參考點COMMIT
  2. 重置索引的COMMIT

樹(git resetReset Demystified充分解釋)

在另一方面:

  • HEAD表示當前承諾
  • HEAD~代表的HEAD

始祖(的~含義的git revisions文檔中解釋,看一下例子在本節結束以更好地理解)

當你把兩個:

  • git reset HEAD:簡單復位指數
  • git reset HEAD~:移動到以前的承諾和重置相應
  • 01指數

在這兩種情況下,您的工作目錄都不會受到影響。

相關問題