2011-07-22 172 views
103

如何將我本地副本上的所有文件恢復爲某個提交?git恢復到某個提交

commit 4a155e5b3b4548f5f8139b5210b9bb477fa549de 
Author: John Doe <[email protected]> 
Date: Thu Jul 21 20:51:38 2011 -0500 

這是我想要恢復的提交。任何幫助將是一個救星!

+0

@ Will iamPursell - 你爲什麼刪除你的答案?你的似乎是最明智的。在回覆之後,OP可以承諾並推送(也就是說,他有一個工作回購)。下面的所有答案都使回購處於一種沒有用處的狀態。 – jww

回答

166

git reset --hard 4a155e5將移動後腦勺到你想要的承諾。如果您不希望任何內容指向您剛剛刪除的歷史記錄,那麼在此之前可能會有其他參考文獻需要刪除。

+0

我一直在使用這種方法,但爲了安全地在另一臺機器上提交,你需要做什麼? (而不是'git pull -f origin master') –

+0

@ChristopheDeTroyer我不會問你的問題。 – Andy

+0

所以這實際上改變了歷史?如果是這樣的話,我需要將它添加到我的'git rebase'和'git commit --amend'列表中。 – the0ther

31

您可以通過鍵入恢復您的工作目錄和索引下的所有文件,下面這條命令

git reset --hard <SHAsum of your commit> 

您也可以鍵入

git reset --hard HEAD #your current head point 

git reset --hard HEAD^ #your previous head point 

希望它可以幫助

+0

'revert'不是正確的命令。 'revert'應用一個新的提交,撤銷之前的提交。它不需要'--hard'選項。 –

+0

@Charles:爲什麼它不正確?它確實採用了--hard選項 –

+2

閱讀文檔['revert'](http://www.kernel.org/pub/software/scm/git/docs/git-revert.html)取消了由一次提交,它不會重置索引和工作樹_to_特定提交這是提問者正在尋找。這就是['reset'](http://www.kernel.org/pub/software/scm/git/docs/git-reset.html)所做的。 '重置'確實需要'--hard'選項。 –