git rebase upstream/master
和git pull --rebase upstream master
之间是否存在差异?若然,那又是什么?遥控器可以是任何遥控器,不一定是上游。
答案 0 :(得分:40)
git pull --rebase
将fetch (git fetch
)首先更新upstream/master
提交。
如果您只是在没有首次更新upstream/master
的情况下重新定义,则不会得到相同的结果。
我在“master
branch and 'origin/master
' have diverged, how to 'undiverge' branches'?”
SnakE提及git pull --rebase
git fetch && git rebase origin/master
<{em> (origin/master)
|
A--B--C (master)
\
B'--D (actual origin/master after changing B and force pushing)
。{
请参阅“in the comments”
git pull --rebase
在这种情况下,git fetch origin
git rebase --onto origin/master B master
的作用是:
origin/master
下面:
B'
(B
)origin/master
是旧的master
(在获取更新之前)origin/master
是要在git fetch
这与git rebase origin/master
+ pull --rebase
的不同之处在于origin/master
命令会尝试找出哪些提交真正您的本地提交,哪些提交来自早先获取的上游。
为此,它会查看远程跟踪分支的reflog(在这种情况下为
git fetch
)。此reflog代表origin
上以“最近的第一个”顺序进行的origin/master@{1}
次操作的提示。对于每个reflog条目,(
...{2}
,然后是master
,等等),它会检查该提交是否是当前分支头B
的祖先。一找到它,它就会选择它作为rebase的起点(上例中的{{1}})。