【问题标题】:Git - master change, rebase onto complex branches? [duplicate]Git - 掌握变化,重新定位到复杂的分支? [复制]
【发布时间】:2014-10-23 19:07:44
【问题描述】:

所以我有一个复杂的本地分支结构:我的主要工作本地分支,以及其他两个分支。我希望在我的分支中对 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

【问题讨论】:

  • 在不知道您的分支更新策略是什么或有多少开发人员拥有这些分支的本地副本的情况下,甚至无法猜测。
  • @AndrewC:这都是本地的,除了提交 M。但我可以让每个人都接受我提出的任何历史记录。
  • @Tonio,这看起来很有希望,但我收到以下错误:致命:没有这样的分支:* 错误:无法应用 C...
  • 在这种情况下,只需从 main 和 rebase 开始,然后执行两个子分支。 git rebase --onto SHA
  • 如果我这样做,我会得到指向旧的非重新定位提交的子分支,如 Tonio 建议的链接中所示。

标签: git merge rebase


【解决方案1】:

你可以这样做

先做

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

我创建了一个演示库,您可以下载here。你可以在上面重播上面的步骤。

【讨论】:

    猜你喜欢
    • 2012-06-02
    • 2019-07-28
    • 2014-05-24
    • 2019-04-28
    • 2020-09-19
    • 2023-03-23
    • 1970-01-01
    • 2018-12-23
    • 1970-01-01
    相关资源
    最近更新 更多