Another question说git pull
就像git fetch
+ git merge
。
但git pull
VS git fetch
+ git rebase
之间有什么区别?
答案 0 :(得分:324)
从您的问题中可以明显看出,您实际上只是在询问git merge
和git 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)
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 pull
与git 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
(改变记录版本历史的方式和不记录的方式之间的差异)