另一个问题说git pull类似于git fetch + git merge。
但是git pull和git fetch + git rebase之间有什么区别呢?
另一个问题说git pull类似于git fetch + git merge。
但是git pull和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)
在这两种情况下,工作树的内容应该是相同的;你只是创造了一段不同的历史。rebase重写了你的历史记录,使它看起来好像你是在原点的新主分支(R)上提交的,而不是在你最初提交的地方(H)。如果别人已经从你的主分支中拉了,你永远不要使用rebase方法。
最后,请注意,你可以通过设置配置参数branch.<name>来为给定的分支设置git pull来使用rebase而不是merge。将base重置为true。你也可以使用git pull -rebase为单个拉做这个。
其他回答
TLDR:
Git pull就像运行Git fetch然后Git merge Git pull -rebase类似于Git fetch然后Git rebase
就你的第一个声明,
Git pull类似于Git fetch + Git merge。
在默认模式下,git pull是git fetch的简写 更准确地说,git pull运行git fetch 给定参数,然后调用git merge来合并检索到的分支 进入当前分支"
(参考:https://git-scm.com/docs/git-pull)
关于你的第二个陈述/问题:
但是git pull和git fetch + git rebase之间的区别是什么?
同样的来源: 快拉,变基
“使用——rebase,它运行git rebase而不是git merge。”
现在,如果你想问
“merge和rebase的区别”
这里也回答了这个问题: https://git-scm.com/book/en/v2/Git-Branching-Rebasing (改变版本历史记录方式的区别)
从你的问题可以很明显地看出,你实际上只是在问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)
在这两种情况下,工作树的内容应该是相同的;你只是创造了一段不同的历史。rebase重写了你的历史记录,使它看起来好像你是在原点的新主分支(R)上提交的,而不是在你最初提交的地方(H)。如果别人已经从你的主分支中拉了,你永远不要使用rebase方法。
最后,请注意,你可以通过设置配置参数branch.<name>来为给定的分支设置git pull来使用rebase而不是merge。将base重置为true。你也可以使用git pull -rebase为单个拉做这个。