另一个问题称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
之间的区别。
因此,让我们假设您处于常见情况下——您在主分支上完成了一些工作,并从远程仓库"origin"中拉取了一些代码。经过fetch之后,情况如下所示:
- 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)
你的工作树内容应在两种情况下保持相同; 你只是创建了一条不同的历史记录。变基会重写你的历史记录,让它看起来像你是在origin的新主分支(R
)上提交的,而不是在最初提交(H
)的地方。如果有人已经从你的主分支中拉取了代码,你就不应该使用变基方法。
最后,请注意,你可以通过将配置参数branch.<name>.rebase
设置为true来为给定分支设置git pull
使用变基而不是合并。你也可以对单个拉取操作使用git pull --rebase
。
git pull
相当于运行git fetch
再运行git merge
。
git pull --rebase
相当于运行git fetch
再运行git 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
和git fetch
+ git rebase
之间有什么区别呢?'
同样来自上面的资源:
git pull --rebase
"使用--rebase选项时,它会运行git rebase而不是git merge。"
'merge
和rebase
之间的区别是什么?'
这也在这里得到了回答:
https://git-scm.com/book/en/v2/Git-Branching-Rebasing(更改版本历史记录方式的差异)
git fetch + git rebase
命令的工作方式。从现在开始,我们的git树上不再有更多或更少的冲突 :) - Travis Legit rebase
也执行了这些额外的步骤。请参阅git help rebase
中--fork-point
的讨论。 - Buster