“之间的区别是什么?”;git签出-f“;及;git重置--硬头“;?

“之间的区别是什么?”;git签出-f“;及;git重置--硬头“;?,git,Git,我需要恢复部署的本地更改。(在旧的skool svn时代,我使用了svn revert) 我用的是git reset--hard HEAD。(还有git-fetch和git-merge-origin/$branch——没有ff用于与上游分支同步。) 但是有些文章指出,git checkout-f可以恢复更改 这些命令之间的主要区别是什么。建议走哪条路 这两种药物的效果完全相同。我建议您选择更适合的解决方案 但是,如果在这种特殊情况下,效果相同,使用不同的值,效果将完全不同。基本上(还有更多内容,

我需要恢复部署的本地更改。(在旧的skool svn时代,我使用了
svn revert

我用的是git reset--hard HEAD。(还有
git-fetch
git-merge-origin/$branch——没有ff
用于与上游分支同步。)

但是有些文章指出,git checkout-f可以恢复更改


这些命令之间的主要区别是什么。建议走哪条路

这两种药物的效果完全相同。我建议您选择更适合的解决方案

但是,如果在这种特殊情况下,效果相同,使用不同的值,效果将完全不同。基本上(还有更多内容,请参见链接主题)通过重置,可以将当前分支和头移动到特定的提交位置,但通过签出,只能移动头。有关更多详细信息,请参见下文


资源:

关于同一主题:


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

      我在一个树枝上,一切都很干净。我签出了master
      git checkout master
      ,并从
      git status
      中发现,对现有文件的更改没有进行提交(是的,在我刚签出的代码上)。我试图恢复到一个干净的状态,这个隐藏声称已经完成,但是git状态仍然没有改变。还尝试了git重置--hard HEAD。它也报告说已成功完成,但状态也不例外。我无法中止这些奇怪的变化


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

      可能重复我刚才的情况完全相同。git重置了一堆修改过的文件——hard HEAD不会让它们消失,但git checkout-f却让它们消失了,所以在某种程度上它们显然不一样;如果你的git行结束设置有点混乱,并且它试图在结帐时转换这些设置,你也可能会遇到这个问题。