混帐拉VS混帐取git rebase
另一个问题说, git pull
就像是一个git fetch
+ git merge
。
但是git pull
VS git fetch
+ git rebase
什么区别?
从你的问题来看,你应该很明显的是你只是在问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)
另一方面,如果你做了适当的改版,你最终会得到这样的结果:
- 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,什么不)