"git checkout -f"和"git reset --hard HEAD"有什么区别?

osm*_*osm 70 git

我需要还原部署的本地更改.(我svn revert在旧的skool SVN时代已经习惯了.)

我正在使用git reset --hard HEAD这个.(此外git fetchgit merge origin/$branch --no-ff用于与上游分支同步处理资料.)

但有些文章指出git checkout -f要恢复变化.

这些命令之间的主要区别是什么.推荐哪种方式?

Col*_*ert 55

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

但是,如果在这种特殊情况下效果是相同的,使用不同的值,它将完全不同.基本上(还有更多,请参阅链接主题)通过重置将当前分支和HEAD移动到特定提交但是通过结帐,您只需移动HEAD.有关详细信息,请参见下文


资源:

在同一主题上:


use*_*768 11

还没有代表对其他答案发表评论,我只是想补充一点,我遇到了两个命令没有相同效果的情况.我进入了一个奇怪的状态,所以这绝对是一个优势.这是发生了什么:

我在一个分支,一切都干净.我检查了主git checkout master,发现从git status,有变化没有上演现有文件提交(是的,在代码中,我刚刚签出).我试图藏匿回到一个干净的状态,藏匿处声称已经完成但git status仍未改变.也试过了git reset --hard HEAD.它也报告说成功完成但状态并没有什么不同.我不能放弃这些奇怪的变化.

但是,git checkout -f解决了这一点.我能够远离这个奇怪的状态.所以,至少在某些方面,两者并不相同.

  • 如果您的git行末尾设置有些混乱,并且正在尝试在结帐时进行转换,那么您也可能会遇到此问题。 (2认同)