“之间的区别是什么?”;git签出-f“;及;git重置--硬头“;?
我需要恢复部署的本地更改。(在旧的skool svn时代,我使用了“之间的区别是什么?”;git签出-f“;及;git重置--硬头“;?,git,Git,我需要恢复部署的本地更改。(在旧的skool svn时代,我使用了svn revert) 我用的是git reset--hard HEAD。(还有git-fetch和git-merge-origin/$branch——没有ff用于与上游分支同步。) 但是有些文章指出,git checkout-f可以恢复更改 这些命令之间的主要区别是什么。建议走哪条路 这两种药物的效果完全相同。我建议您选择更适合的解决方案 但是,如果在这种特殊情况下,效果相同,使用不同的值,效果将完全不同。基本上(还有更多内容,
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行结束设置有点混乱,并且它试图在结帐时转换这些设置,你也可能会遇到这个问题。