2011-06-01 108 views
52

我需要恢复部署的本地更改。 (我使用svn revert这个在旧的skool SVN天。)“git checkout -f”和“git reset --hard HEAD”有什么区别?

而即时使用git reset --hard HEAD为此。 (同时git fetchgit merge origin/$branch --no-ff用于与上游分支同步)

但是有些文章指出git checkout -f用于还原更改。

这些命令之间的关键区别是什么。推荐哪种方式?

+1

[git reset --hard hash和git checkout hash是否有区别?](http://stackoverflow.com/questions/2541545/is-there-a-difference-between -git-reset-hard-hash-and-git-checkout-hash) – Casebash 2011-11-16 05:50:25

回答

37

他们两个具有完全相同的效果。我建议你选择你更舒适的解决方案。

但是,如果在这种特殊情况下效果是相同的,不同的值将会完全不同。基本上(还有更多,请参阅链接的主题),如果将当前分支和HEAD移动到特定的提交但结帐时,只移动HEAD。有关更多详情,请参阅下文


资源:

关于同一主题:

9

不具备代表其他答案尚未就此发表评论,我只是想补充一点,我碰到其中两个命令不具有相同的情况下,就影响。我进入了一个奇怪的状态,所以这绝对是一个边缘案例。这是发生了什么事:

我在一个分支,一切都干净。我检查出主git checkout master,并从git status发现,现有文件未进行提交的更改(是的,在我刚刚签出的代码上)。我试图回到一个干净的状态,存储声称已完成,但git status仍然没有改变。还试过git reset --hard HEAD。它也报告成功完成,但状况并没有改变。我无法放弃这些奇怪的变化。

但是,git checkout -f解决了这个问题。我能够摆脱这种奇怪的状态。所以,至少在某些方面,这两者并不相同。

+0

我刚刚有完全相同的情况。有一堆修改后的文件,git reset - hard HEAD不会离开,但git checkout -f的确如此,所以它们在某些级别显然不一样。 – 2014-07-09 14:42:35

+1

在我们的案例中,这是由于文件权限的变化造成的;这个固定它http:// stackoverflow。COM /问题/ 1257592 /怎么办 - 我 - 删除 - 文件 - 说的老模式 - 100755-新模式-100644-从-不分级-CHA – 2014-07-09 14:49:01

相关问题