5

假设我有 2 个平行的长寿分支:masterexperimental. 我在 的一个主题分支上做了一些工作experimental,我为几个特性(、、、)做feature1feature2件事feature3。我将如何将完成的工作移植feature2master?

我的初始存储库:

  master
    |
A-B-C
 \                              
  D-E       I       L           P
     \     / \     / \         /|
      F-G-H   \   /   \       / |
          |    J-K     \     / experimental
      feature1   |      M-N-O
              feature2      |
                         feature3

我想要的存储库:

                                   master
                                     |
A-B-C-----------------------------J'-K'
 \                              
  D-E       I       L           P
     \     / \     / \         /|
      F-G-H   \   /   \       / |
          |    J-K     \     / experimental
      feature1   |      M-N-O
              feature2      |
                         feature3

我能想到的一种方法是,git checkout master; git cherry-pick J K但这很容易出错,并且主题分支可能有许多不同的提交。

我希望它能够工作git checkout master; git <transplant-commits-in-topic-branch-onto-current-branch> feature2,但是我熟悉的所有变基命令都移植了来自共同祖先的所有差异(在这种情况下A),我只想移植和之间的差异IK而不是弄乱提交哈希.

一点上下文:我正在开发一个从原始代码库中分叉出来的代码库,但是我想贡献某些功能。我在主题分支中开发了所有新功能,然后我将它们合并回我的主人。

4

1 回答 1

8

如果你只是想移动feature2master,并且 'I' 和 'K' 不依赖于 中所做的更改feature1,你可以移植它:

git rebase --onto master feature1 feature2

该语法松散地读作“重新定位feature2master。它的原始上游是feature1。”

然后,如果您合并feature2master,这将是一个快进合并。

但是,如果feature2依赖于feature1不会发生的变化master,整个情况会变得更加复杂,而您想要做什么完全取决于您的工作流程以及您与父项目的关系。樱桃采摘会起作用......只要您愿意稍后将您的功能分支合并到与原点的主人复杂的地方。或者您可以重新设置所有分支的基础,以便完全feature2适用于master, 或... 大约十几种其他方法。这实际上取决于您对这些分支机构的长期计划。一般来说,如果你能帮忙的话,切断feature2feature3等等) 。master它会为你省去很多麻烦。

于 2013-08-27T16:18:11.190 回答