从你的问题可以很明显地看出,你实际上只是在问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)

在这两种情况下,工作树的内容应该是相同的;你只是创造了一段不同的历史。rebase重写你的历史记录,使它看起来好像你是在origin的新主分支(R)上提交的,而不是在你最初提交的地方(H)。如果别人已经从你的主分支中抽取了数据,你就不应该使用rebase方法。

最后,请注意,通过将config参数branch.<name>.rebase设置为true,实际上可以为给定分支设置git pull来使用rebase而不是merge。您也可以使用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)

< br >

关于你的第二个陈述/问题:

“但是__ABC0和__ABC1 + git rebase之间的区别是什么?”

同样,from same source:
git pull --rebase < / p >

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

< br >

现在,如果你想问

` __ABC0和rebase的区别`

这里也有答案:
https://git-scm.com/book/en/v2/Git-Branching-Rebasing < br > (改变版本历史记录方式的区别)