另一个问题说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为单个拉做这个。