Git - 主分支更改,如何在复杂的分支上进行变基?

3

我有一个复杂的本地分支结构:我的主要工作本地分支,以及从它分支出去的另外两个分支。在master中有一个新的更改,我想在我的所有分支中使用它。什么是将其传播到所有分支的最佳方法?重置是否可行?

A---E---M  master 
     \ 
      F---G---H  local_branch_main
          |\ 
          | I---J  local_subbranch_1
           \K---L  local_subbranch_2

理想情况下,我希望只需将所有分支引用到新主提交(不存在冲突)即可:
A---E---M  master 
         \ 
          F---G---H  local_branch_main
              |\ 
              | I---J  local_subbranch_1
               \K---L  local_subbranch_2

不知道你的分支更新策略是什么,也不知道有多少开发人员拥有这些分支的本地副本,甚至猜测都是不可能的。 - Andrew C
@AndrewC:这都是本地的,除了提交M。但我可以让每个人接受我想出来的任何历史记录。 - eengineer
@Tonio,看起来很有前途,但我遇到了以下错误: 致命错误:没有这样的分支:* 错误:无法应用 C...<C 的提交信息> - eengineer
在这种情况下,只需从主分支开始重新定位,然后再处理两个子分支。git rebase --onto SHA - Andrew C
如果我这样做,我会得到指向旧的未变基提交的子分支,就像Tonio建议的链接中一样。 - eengineer
1个回答

0
你可以这样做。
首先执行。
git checkout local_branch_main
git rebase master

如果你很幸运,没有任何冲突,你的代码库现在应该是这样的:
A---E---M  master 
    \    \ 
     \    F'---G---H  local_branch_main
      F
      |\ 
      | I---J  local_subbranch_1
       \K---L  local_subbranch_2

现在来到有趣的部分。正如您所看到的提交FF'包含相同的更改(如果没有冲突),但是F'具有另一个父提交和另一个提交ID。我通过将其命名为F'来使其可见。

因此,现在您可以切换到分支local_subbranch_1并将其重新基于F'

git checkout local_subbranch_1
git rebase F'

当然,你必须用 F' 的提交 ID 替换 F'

现在你的代码库看起来像这样

   A---E---M  master 
       \    \ 
        \    F'---G---H  local_branch_main
        F     \ 
         \     I---J  local_subbranch_1
          \
           K---L  local_subbranch_2

最后,您可以检出 local_subbranch_2 并在 F' 上进行变基,这样您的存储库将如下所示:

   A---E---M  master 
            \ 
             F'---G---H  local_branch_main
             |\ 
             | I---J  local_subbranch_1
             \
               K---L  local_subbranch_2

我已经创建了一个演示存储库,你可以在这里下载。你可以在上面重复上述步骤。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接