“git checkout -f”和“git reset –hard HEAD”有什么区别?

我需要恢复部署的本地更改。 (我曾经使用svn revert在旧的skool SVN中svn revert了这个。)

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

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

这个命令之间的关键区别是什么? build议哪种方式?

他们两个具有完全相同的效果。 我build议你select你更舒适的解决scheme。

但是,如果在这种特殊情况下效果是一样的,不同的价值观将会完全不同。 基本上(有更多,看到链接的主题)与重置您将当前分支和头移动到一个特定的提交,但与结帐,你只移动HEAD。 有关更多详情,请参阅下文


资源:

  • 混帐重置
  • git结帐

在同一主题上:

  • git reset –hard HEAD和git checkout有区别吗?
  • “git reset –hard hash”和“git checkout hash”有区别吗?
  • 你能给我解释一下git reset in plain english吗?

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

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

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