混帐拉VS混帐取git rebase

另一个问题说, git pull就像是一个git fetch + git merge

但是git pull VS git fetch + git rebase什么区别?

从你的问题来看,你应该很明显的是你只是在问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) 

另一方面,如果你做了适当的改版,你最终会得到这样的结果:

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

在这两种情况下,你的工作树的内容应该是一样的; 你刚才创造了一个不同的历史 。 基地改写你的历史,使它看起来好像你已经在原来的新的主分支( R ),而不是你最初承诺( H )的地方。 如果其他人已经从您的主分支拉出来,您不应该使用分拣方法。

最后,请注意,通过设置config参数branch.<name>.rebase为true,实际上可以为给定的分支设置git pull来使用rebase而不是merge。 你也可以使用git pull --rebase来做这个git pull --rebase

在回复你的第一条语句时, “git pull就像是一个git fetch + git merge。 ”,

“在默认模式下,git pull是git fetch的缩写,然后是git merge FETCH_HEAD”更准确地说,git pull使用给定的参数运行git fetch,并调用git merge将检索到的分支头合并到当前分支中“

(Ref: https : //git-scm.com/docs/git-pull )

对于你的第二个陈述/问题: “但是,git pull VS git fetch + git rebase有什么区别呢”同样的来源:

“使用–rebase,它运行git rebase而不是git merge。”

现在,如果你想问一下获取和合并的区别,这里也可以这样回答: https : //git-scm.com/book/en/v2/Git-Branching-Rebasing (改变版本历史的方式被logging,什么不)