git pull VS git fetch git rebase

时间:2010-07-28 20:16:04

标签: git git-rebase git-pull git-fetch

Another questiongit pull就像git fetch + git merge

git pull VS git fetch + git rebase之间有什么区别?

2 个答案:

答案 0 :(得分:324)

从您的问题中可以明显看出,您实际上只是在询问git mergegit rebase之间的区别。

所以让我们假设你处于常见的情况 - 你已经在你的主分支上完成了一些工作,你从原点开始,也做了一些工作。获取后,事情看起来像这样:

- o - o - o - H - A - B - C (master)
               \
                P - Q - R (origin/master)

如果你在这一点上合并(git pull的默认行为),假设没有任何冲突,你最终得到这个:

- o - o - o - H - A - B - C - X (master)
               \             /
                P - Q - R --- (origin/master)

如果另一方面你做了适当的rebase,你最终会得到这个:

- o - o - o - H - P - Q - R - A' - B' - C' (master)
                          |
                          (origin/master)

在两种情况下,工作树的内容应该相同;你刚刚创造了一个导致它的不同历史。 rebase重写您的历史记录,使其看起来好像您已经在origin的新主分支(R)上提交,而不是您最初提交的地方(H)。如果其他人已从主分支中撤出,则不应使用rebase方法。

最后,请注意,通过将config参数git pull设置为true,您实际上可以为给定分支设置branch.<name>.rebase以使用rebase而不是merge。您也可以使用git pull --rebase进行一次拉动。

答案 1 :(得分:3)

TLDR:

git pull就像运行get fetch然后git merge一样 git pull --rebase就像git fetch然后git rebase

回复你的第一个陈述,

git pull就像git fetch + git merge

  

&#34;在默认模式下,git pull是git fetch的简写,后跟   git merge FETCH_HEAD&#34;更确切地说,git pullgit fetch一起运行git merge   给定参数,然后调用git pull来合并检索到的分支   进入当前的分支&#34;

(参考:https://git-scm.com/docs/git-pull


对于您的第二个陈述/问题:

&#39;但git fetch VS git rebase + git pull --rebase&#39;

之间有什么区别?

同样,来自同一来源:
merge

  

&#34;使用--rebase,它运行git rebase而不是git merge。&#34;


现在,如果你想问

&#39; rebase<input type="checkbox" name="servidor[{{$server->id}}]" value="{{$server->status}}" {{$server->status == 1 ? 'checked' : ''}}><span></span> &#39;

之间的区别

这里也回答了:
https://git-scm.com/book/en/v2/Git-Branching-Rebasing
(改变记录版本历史的方式和不记录的方式之间的差异)