我需要还原部署的本地更改。(我曾svn revert在过时的SVN时代使用过此功能。)
我git reset --hard HEAD为此使用。(此外git fetch和git merge origin/$branch --no-ff用于与上游分支同步处理资料。)
但是有些文章指出git checkout -f要还原更改。
这些命令之间的主要区别是什么。推荐哪种方式?
Answers:
他们两个有完全相同的效果。我建议您选择更舒适的解决方案。
但是,如果在这种特定情况下效果相同,则使用不同的值将完全不同。基本上(还有更多信息,请参阅链接的主题),通过重置将当前分支和HEAD移至特定的提交,而通过检出,仅移动HEAD。有关更多详细信息,请参见下文。
资源:
在同一主题上:
现在还没有代表对其他答案发表评论,我只是想补充一点,我遇到了两个命令的效果不同的情况。我进入了一个奇怪的状态,所以这绝对是个极端情况。这是发生了什么:
我在树枝上,一切都很干净。我检出master git checkout master,发现git status对未暂存的现有文件进行了更改(是的,在我刚刚检出的代码上)。我尝试隐藏以恢复到干净状态,该隐藏声称已完成但git status仍未更改。也试过了git reset --hard HEAD。它也报告成功完成,但状态没有改变。我无法放弃这些怪异的变化。
但是,git checkout -f解决了这个问题。我能够摆脱这种奇怪的状态。因此,至少在某些方面,两者并不相同。