我发现后者比第一个更快,所以我通常在git fetch
之后,每当我需要将本地分支与遥控器同步时。有什么区别,如果有的话?
以下命令:
git fetch
git reset --hard origin/<branch>
将丢弃所有本地更改。
在哪里:
git pull
这完全相同:
git fetch
git merge origin/<branch>
将尝试保留当地的变化。
$ git pull
# takes the latest changes of origin/branch (exists both local & remote changes)
$ git reset --hard origin/branch
# replace your local with origin's branch history (discard local changes)
示例:说,我们在本地A
有两个提交,B
和remote有两个提交A
,C
。现在,如果你拉,那么你的本地包含A
,B
,C
不同,如果重置然后你的本地将有A
,C
而不是B
。
获取源更新的方式比您的性能问题更重要。您需要针对特定情况使用它们。我可以举两个例子:
git reset --hard ...
可用于更新生产中的代码。这通常发生在项目部署的早期阶段,有着懒惰的想法。git pull
是获得新提交的最常用方式,通常情况下你不会有巨大的局部变化。如果您的提交周期越长,同一分支上的人越多,您最终可能会有一种直觉,即先做git pull --rebase
或先获取然后进行比较。Git可以明确满足您的开发风格的特定需求,您可以在路上发现它们。一旦您对工作安全感到满意,就不应该关注性能。
这两个命令主要用于不同的情况。
qazxsw poi pull(fetch and merge)从远程更改为本地,特别是其他push提交到远程,你希望这些提交适用于你的本地分支。
git pull
强制使您的本地分支指向origin / branch指向的提交。通常情况下,您希望放弃所做的本地更改并将本地分支保持为远程状态。
它们的作用完全不同:
git reset --hard origin/branch
:将来自远程存储库的更改合并到当前分支中。在默认模式下,git pull是git fetch的简写,后跟git merge FETCH_HEAD。
随着git pull
Git将:
git reset --hard origin/branch
点。<SOME-COMMIT>
中提交的版本相同。注意:值得注意的是<SOME-COMMIT>
是一个潜在的危险命令,因为它会丢弃所有未提交的更改。为安全起见,在使用之前,应始终检查git status的输出是否干净(即为空)。