git合并上游,而rebase进一步向下导致我再次合并

时间:2015-06-01 15:53:27

标签: git merge

我分出了一个repo并且工作了一段时间,有10次提交(10c),然后我从上游(m1)合并然后工作了一段时间并且有3次提交(3c)。

Iam现在试图改变,而3c还可以,当我超越m1到rebase / squash消息时,它要求我再次合并 - 为什么?

1 个答案:

答案 0 :(得分:2)

而不是合并10c:

     X--x--x--M (10c) --x--x--x (3c, master)
    /        /
u--u--u--u--u (upstream/master)

最好在上游/主人之上 rebase 10c。

考虑到目前的情况,你有10次提交(从X到M,不包括合并提交),然后3次提交,你可以这样做:

# let's mark the current master
git checkout master
git branch tmp

# let's reset master to just before the merge commit
# make sure you don't have any work in progress
git stash
git reset --hard M^1

     X--x--x (master) --M (10c) --x--x--x (3c, tmp)
    /                  /
u--u--u--u------------u (upstream/master)

# let's rebase those 10 commits (from X) on top of upstream master
git rebase upstream/master

     X--x--x--M (10c) --x--x--x (3c, tmp)
    /        /
u--u--u--u--u (upstream/master) --X'--x'--x' (master)

# Finally, rebase tmp

git checkout tmp
git rebase --onto master M tmp
git merge master

     X--x--x--M (10c) --x--x--x (3c)
    /        /
u--u--u--u--u (upstream/master) --X'--x'--x'--x'--x'--x' (tmp,master)