2011-02-15 75 views
20

我很困惑。我想回到之前在「git log」中確定的提交。Git:恢復到以前的提交狀態

但是當我做「git checkout」時,我沒有說commit。沒有什麼變化。 它告訴我我處於分離HEAD模式,但我想要的文件不在那裏。

我做錯了什麼?

MRB

回答

18

git reset --hard <commit>從手冊頁:

匹配工作樹和索引,以該樹被切換到。在工作樹中跟蹤文件的任何更改都會丟失。

git checkout用於將您的工作目錄切換到不同的分支或提交。這不會在那裏移動HEAD

+0

此外,`reset`用於將您的索引和工作目錄重置爲以前的狀態。 `checkout`用於檢出新的或不同的分支。一旦你習慣了它,它並沒有那麼混亂。 =) – 2011-02-15 13:38:46

+1

請查閱http://www.gitready.com/和http://learn.github.com/p/intro.html以獲取最新教程,然後訪問http://gitref.org以獲取參考信息,準備好了。 – 2011-02-15 13:40:48

9

不要混帳重置 - 它是永久的!

請使用

git stash -u 

,而不是!如果你在那裏有一塊工作不慎發生,你仍然可以恢復。除非您選擇這樣做,否則將永遠不會推送到您的遙控器,方法是將其從分支中取出並推出。您也可以使用git checkout來完成同樣的事情。語法是

git checkout HEAD -- . 

但它有和git reset --hard一樣的問題。堅持藏匿,你將會挽救未來失去你的頭髮。

再回應

上述解決方案恢復所有的更改。但是,你問如何擺脫一些變化。我會補充完整性。

要做到這一點,你可以

git add file1 file2 file3 
git stash save --patch 

現在將提示正是你想要做什麼dissappear ...下來什麼都粒度級別的。因此,如果您選擇這樣做,您可以安全地「拒絕」對單個文件的少量更改。