在单个谱系中折叠多个分支的最简单方法

时间:2016-02-25 05:09:55

标签: git git-rebase rebase

我有两个分支,我保持在上游/主人之上。一个分支将另一个分支作为祖先,因此它们形成一条线。

U1 (upstream/master)
  \
   A -- B (fixes)
         \
          C -- D (features)

后来,上游/大师继续前进......

U1 -- U2 (upstream/master)
  \
   A -- B (fixes)
         \
          C -- D (features)

......我想在两个分支上重新定位。

U1 -- U2 (upstream/master)
        \
         A' -- B' (fixes)
                 \
                  C' -- D' (features)

我知道两种方法,每种方法都有缺点。

git rebase upstream/master fixes
git rebase fixes features

这两个命令有时会起作用,有时会在第二个命令上给我合并冲突。

git rebase upstream/master features
# figure out the hash code of the new commit corresponding with B'
git branch -f fixes <sha of B'>

这只涉及一个rebase,但移动分支是繁琐且容易出错的。

我查看了rebase --preserve-merges,但这看起来并不合适,因为没有合并提交。

有没有更好的方法来完成rebase?

1 个答案:

答案 0 :(得分:2)

避免合并冲突的一种方法是将分支从pre-rebase历史移动到post rebase历史。这无疑是可怕的,因为它需要搞清楚每个提交的新版本,但可能比不必要地合并更快。

例如

git rebase upstream / master features

U1 -- U2 (upstream/master)
        \
         A' -- B' 
                 \
                  C' -- D' (features)

git branch -f fixes(B&#39; SHA)#更改分支指向的位置。

U1 -- U2 (upstream/master)
        \
         A' -- B' (fixes)
                 \
                  C' -- D' (features)