保持第二级分支与第一级分支保持同步

时间:2015-11-04 21:45:06

标签: git

有时我会处理多个部分的特征,因为它是一个很大的特征,但每个部分都依赖于之前的部分。

我将从第一部分分支第二部分,而第一部分仍在审核/测试/等等。我最终得到类似的东西 -

         ---F2->   (Feature branch part 2)
        /
    ---F1------>   (Feature branch part 1)
   /
--M0---M1---M2->   (master)

一切正常,直到我进入功能第2部分,并意识到我需要在功能部分1中进行更改或更正。

所以我切换回第一个功能分支并进行了更改(并将其压缩,使其保持1次提交)

           ---F2->   (Feature branch part 2)
          /
      ---F1   
     /
    /----F1' (Feature branch part 1)
   /
--M0---M1---M2->   (master)

当我重新定义功能第2部分分支以引入F1'时,我会解决所有冲突,但它仍会保留F1。所以我最终得到F1F1'的“双重提交”。

在重新定位时,基本上替换 F1F1'有什么办法吗?

更一般地说 - 关于如何使用涉及多层分支的功能的最佳实践是什么?我通常永远不会超过2,但如果有一个很好的工作流程来管理它,我就会使用它。

3 个答案:

答案 0 :(得分:1)

您可以通过B2中的交互式rebase来完成此操作。

$ git checkout B2
$ git rebase -i B1

然后只需删除F1的行,只保留F1的行,你得到了你想要的东西,切换彼此的提交:)

我将Fi用于提交,B用于分支。显然,rebase是在它打开的编辑器中的每次提交,如果我们在讨论功能分支中的一个或多个提交,我就不会抓住它。

答案 1 :(得分:1)

另一种选择:

git checkout F2
git rebase --onto F1 "$(git merge-base --fork-point F1)"

答案 2 :(得分:1)

Git让这很简单,只需告诉它你正在跟踪的内容。为了制作你的图表,你做了例如这个,

git checkout -tb F2         # F2 tracks current checkout (or you could say F1 explicitly)
work work commit commit
git checkout F1             # F1 needs work
work some more
git rebase                  # F1 needs its own rebase
git checkout F2             # back to F2
yet more work

在杂草中看起来很深,但这是一个非常常见的序列。这里的rebase命令是

git rebase

当您重新定位到默认跟踪分支时,Rebase默认为--fork-point,当您没有(必要)F2检出并且F2不跟踪F1时为git rebase --fork-point F1 F2

相关问题