git pull VS git fetch git rebase

git pull VS git fetch git rebase

另一个问题是,git pull就像git fetchgit merge一样。

但是,git pullgit fetchgit rebase有什么区别?


从你的问题中应该可以很明显地看出,你实际上只是在问git mergegit rebase之间的区别。

所以让我们假设你是在一个普通的情况下——你已经在你的主分支上做了一些工作,并且你从Origin那里得到了一些工作,Origin也做了一些工作。取货之后,情况如下:

1
2
3
- o - o - o - H - A - B - C (master)
               \
                P - Q - R (origin/master)

如果此时合并(git pull的默认行为),假设没有任何冲突,则最终会出现以下情况:

1
2
3
- o - o - o - H - A - B - C - X (master)
               \             /
                P - Q - R --- (origin/master)

另一方面,如果你做了适当的调整,你会得到这样的结果:

1
2
3
- o - o - o - H - P - Q - R - A' - B' - C' (master)
                          |
                          (origin/master)

在这两种情况下,工作树的内容应该是相同的;您刚刚创建了一个不同的历史记录。REBASE重写了您的历史,使您看起来像是在Origin的新主分支(R)之上进行的,而不是您最初进行的(H)。如果其他人已经从您的主分支中退出,则不应使用REBASE方法。

最后,请注意,通过将配置参数branch..rebase设置为true,您实际上可以为给定分支设置git pull,以使用rebase而不是merge。您也可以使用git pull --rebase进行单次拉动。


TLDR:

git pull就像运行get fetch,然后是git mergegit pull --rebasegit fetch相似,然后是git rebase

作为对你第一次陈述的答复,

git pull就像git fetchgit merge一样。

"In its default mode, git pull is shorthand for git fetch followed by
git merge FETCH_HEAD" More precisely, git pull runs git fetch with the
given parameters and then calls git merge to merge the retrieved branch
heads into the current branch"

(参考:https://git-scm.com/docs/git-pull)

对于第二个陈述/问题:

"但是,git pullgit fetchgit rebase的区别是什么?"

同样,来自同一个来源:埃多克斯1〔6〕

"With --rebase, it runs git rebase instead of git merge."

号现在,如果你想问

'mergerebase之间的差异'

这里也有答案:https://git-scm.com/book/en/v2/git-branching-rebasing(更改版本历史记录的方式与不更改版本历史记录的方式之间的区别)