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

Cra*_*lin 8 git rebase git-rebase

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

U1 (upstream/master)
  \
   A -- B (fixes)
         \
          C -- D (features)
Run Code Online (Sandbox Code Playgroud)

后来,上游/大师向前迈进......

U1 -- U2 (upstream/master)
  \
   A -- B (fixes)
         \
          C -- D (features)
Run Code Online (Sandbox Code Playgroud)

...而且我想要将两个分支机构重新加入.

U1 -- U2 (upstream/master)
        \
         A' -- B' (fixes)
                 \
                  C' -- D' (features)
Run Code Online (Sandbox Code Playgroud)

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

git rebase upstream/master fixes
git rebase fixes features
Run Code Online (Sandbox Code Playgroud)

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

git rebase upstream/master features
# figure out the hash code of the new commit corresponding with B'
git branch -f fixes <sha of B'>
Run Code Online (Sandbox Code Playgroud)

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

我查看了rebase --preserve-merges,但这似乎不适用,因为没有合并提交.

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

mfa*_*ugi 2

避免合并冲突的一种方法是将分支从预变基历史记录移至后变基历史记录。这无疑是可怕的,因为它需要找出每个提交的新版本,但可能比不必要的合并更快。

例如。

git rebase 上游/主功能

U1 -- U2 (upstream/master)
        \
         A' -- B' 
                 \
                  C' -- D' (features)
Run Code Online (Sandbox Code Playgroud)

gitbranch-ffixes(SHAforB')#更改分支指向的位置。

U1 -- U2 (upstream/master)
        \
         A' -- B' (fixes)
                 \
                  C' -- D' (features)
Run Code Online (Sandbox Code Playgroud)