Is there a difference between git rebase upstream/master
and git pull --rebase upstream master
, and if so, what? The remote could be any remote, not necessarily upstream.
1 回答
将首先获取()git pull --rebase
,更新提交。git fetch
upstream/master
如果您只是在没有先更新的情况下进行变基upstream/master
,您将不会得到相同的结果。
我在“master
分支和' origin/master
'已经发散,如何'发散'分支'? ”中说明它
SnakE在评论中提到的git pull --rebase
并不完全是 git fetch && git rebase origin/master
.
见“什么” git pull --rebase
“做什么? ”
(origin/master)
|
A--B--C (master)
\
B'--D (actual origin/master after changing B and force pushing)
git pull --rebase
在这种情况下,什么是:
git fetch origin
git rebase --onto origin/master B master
这里:
- origin/master 是新更新的
origin/master
(B'
) B
是旧的origin/master
(在 fetch 更新之前)master
是要在其上重放的分支origin/master
这与git fetch
+的不同之处在于git rebase origin/master
,该pull --rebase
命令试图找出哪些提交确实是您的本地提交,以及哪些提交是在较早的提取中来自上游的。
为此,它会查看远程跟踪分支的 reflog(
origin/master
在本例中为 )。此 reflog以“最近的第一”顺序表示对 的连续git fetch
操作的提示。origin
对于每个 reflog 条目,(
origin/master@{1}
、 then...{2}
等) 它检查该提交是否是当前分支 head 的祖先master
。一旦找到它,它就会选择它作为 rebase 的起点(B
在上面的示例中)。