x--x--x--x--x(*) <- current branch B ('*'=HEAD)
\
\
\--y--y--y <- other branch to merge
,我们不改变当前分支'B',所以我们所拥有的仍然是我们正在工作的(并且我们从另一个分支合并)
x--x--x--x--x---------o(*) MERGE, still on branch B
\ ^ /
\ ours /
\ /
--y--y--y--/
^
their
在一个基础上:
但是在一个基础上,我们换了一边,因为rebase做的第一件事是检出上游分支!(在上面重放当前提交)
x--x--x--x--x(*) <- current branch B
\
\
\--y--y--y <- upstream branch
A git rebase upstream将首先将B的HEAD更改为上游分支HEAD(因此与之前的“当前”工作分支相比,切换为“our”和“their”。)
x--x--x--x--x <- former "current" branch, new "theirs"
\
\
\--y--y--y(*) <- upstream branch with B reset on it,
new "ours", to replay x's on it
,然后rebase将在新的'our' B分支上重放'their'提交:
x--x..x..x..x <- old "theirs" commits, now "ghosts", available through reflogs
\
\
\--y--y--y--x'--x'--x'(*) <- branch B with HEAD updated ("ours")
^
|
upstream branch