git pull VS git获取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)
另一方面,如果你做了适当的rebase,你最终会得到这样的结果:
- o - o - o - H - P - Q - R - A' - B' - C' (master)
|
(origin/master)
在这两种情况下,你的工作树的内容应该是一样的; 你刚刚创建了一个不同的历史 。 基地改写你的历史,使它看起来好像你是在原来的新主分支( R
)之上进行的,而不是你最初承诺的地方( H
)。 如果其他人已经从你的主分支中拉出,你永远不应该使用rebase方法。
最后,请注意,通过将config参数branch.<name>.rebase
为true,您实际上可以为给定分支设置git pull
以使用rebase而不是merge。 你也可以使用git pull --rebase
做一次单拉操作。
在回复你的第一条语句'git pull就像一个git fetch + git merge''时,
“在默认模式下,git pull是git fetch的缩写,然后是git merge FETCH_HEAD”更确切地说,git pull使用给定的参数运行git fetch并调用git merge将检索到的分支头合并到当前分支中“
(参考: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-Rebase(改变版本历史记录被记录,什么不)
上一篇: git pull VS git fetch git rebase
下一篇: In git how is fetch different than pull and how is merge different than rebase?