我发现后者比第一个更快,所以每当我需要将本地分支与远程同步时,我通常会在git fetch
之后执行此操作。如果有的话有什么区别?
答案 0 :(得分:21)
以下命令:
git fetch
git reset --hard origin/<branch>
将丢弃所有本地更改。
其中:
git pull
与...完全相同:
git fetch
git merge origin/<branch>
将尝试保留本地更改。
答案 1 :(得分:2)
$ 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
中有两次提交,而远程有两次提交A
,C
。现在,如果你拉,那么你的本地包含A
,B
,C
,就像你重置一样,那么你的本地将包含A
,{{1不是C
。
答案 2 :(得分:0)
他们所做的完全不同:
git pull
:
将来自远程存储库的更改合并到当前分支中。在默认模式下,git pull是git fetch的简写,后跟git merge FETCH_HEAD。
使用git reset --hard origin/branch
Git会:
<SOME-COMMIT>
。<SOME-COMMIT>
中提交的版本相同。 注意强>:
值得注意的是git reset --hard
是一个潜在危险的命令,因为它会丢弃所有未提交的更改。为安全起见,在使用之前,应始终检查git status的输出是否干净(即为空)。
答案 3 :(得分:0)
获取源更新的方式比您的性能问题更重要。您需要针对特定情况使用它们。我可以举两个例子:
git reset --hard ...
可用于更新生产中的代码
你经常发现自己正在修改生产代码
调试。这通常发生在项目的早期阶段
部署与懒惰的想法。git pull
是获得新提交的最常用方式
通常是有道理的,你不会有巨大的局部变化。如果您的提交期更长,人数更多
同一个分支,你最终可能有一种直觉git pull --rebase
或。{
首先获取然后比较。Git可以明确满足您的开发风格的特定需求,您可以在路上发现它们。一旦你对你的工作安全感到高兴,就不应该担心表现。
答案 4 :(得分:0)
这两个命令主要用于不同的情况。
git pull
拉(获取和合并)从远程更改为本地,特别是其他推送提交到远程,您希望这些提交适用于您的本地分支。
git reset --hard origin/branch
强制使您的本地分支指向origin / branch指向的提交。通常情况下,您希望放弃所做的本地更改,并将本地分支保持为远程状态。