我需要恢复部署的本地更改。 (我在旧的skool SVN时代使用了svn revert
。)
我正在使用git reset --hard HEAD
。 (同样git fetch
和git merge origin/$branch --no-ff
用于与上游分支同步。)
但有些文章指出git checkout -f
还原了更改。
这些命令之间的主要区别是什么。推荐哪种方式?
答案 0 :(得分:50)
其中两个具有完全相同的效果。我建议你选择更舒适的解决方案。
但是如果在这种特殊情况下效果相同,则使用不同的值会完全不同。基本上(还有更多,请参阅链接主题)通过重置将当前分支和HEAD移动到特定提交但是通过结帐,您只需移动HEAD。有关详细信息,请参阅下文。
<强>资源:强>
关于同一主题:
答案 1 :(得分:11)
还没有代表对其他答案发表评论,我只是想补充一点,我遇到了两个命令没有相同效果的情况。我进入了一个奇怪的状态,所以这绝对是一个优势。发生了什么:
我在一个分支,一切都很干净。我检查了主git checkout master
并从git status
发现现有文件的更改没有为提交暂存(是的,我刚检出的代码)。我试图藏匿回到一个干净的状态,藏匿声称已经完成,但git status
仍未改变。还尝试了git reset --hard HEAD
。它也报告说成功完成但状态并没有什么不同。我不能放弃这些奇怪的变化。
然而,git checkout -f
解决了这个问题。我能够远离这个奇怪的状态。所以,至少在某些方面,两者并不相同。