将大量提交复制到新分支

时间:2018-01-03 07:32:08

标签: git

我有三个分支:

  • releaseX
  • 开发
  • topicA

releaseX 可能是两周前从开发分支出来的。

很久以前

topicA develop 分支出来。因为我们知道它最终将合并到发布分支中,所以我们不断将 develop 合并到其中。不幸的是,我们现在在 releaseX 分支中的开发中提交了大量的提交。

以下是我的方案图:

      (releaseX)
     /
A---B---C---D---E---F---G---H (develop)
                     \
                      S---T---X---Y (topicA)

上面,我需要保留S T X Y这样的提交,但需要摆脱CE。有问题的提交数量大约是50或更多,但显然我无法在这里说明它们。

我的目标是创建一个基于 releaseX 的分支,其中包含来自 topicA 的50多个相关提交。我尝试在 releaseX 上创建一个新分支,然后在 topicA 上重新设置新分支,但这不允许我排除我不想要的提交那里。

根据 releaseX “<樱>挑选”这些50多个提交到 topicA_clean 的最佳方法是什么? < / p>

4 个答案:

答案 0 :(得分:5)

此处使用git cherry-pick的解决方案(适用于git --version&gt; = 1.7.2):

可以轻松地cherry-pick提交列表:

$ git cherry-pick -x <commit-hash-1> <commit-hash-2> <...> <commit-hash-X>

我想使用-x选项以便稍后能够找到原始提交

如果你碰巧有一个你希望cherry-pick提交的列表,你可以使用一点点命令行魔法:

$ cat cherry-pick-hashes.md | xargs git cherry-pick -x

答案 1 :(得分:1)

这取决于是否有更多的提交要么采取或放弃。

如果您有更多提交,那么您可以根据topicA创建一个新分支,并使用git rebase --interactive HEAD~50删除您不想保留的提交。

如果您有更多的提交要求,那么您可以自己提交所需的提交。

答案 2 :(得分:1)

考虑到所需的提交数量,一个好的解决方案是使用git rebase --onto

说明一下,在合并后将您的情况看起来如下所示,以及强调了四个提交的主题A,E,F,G和H:

                              o---o---o releaseX
                             /
o---o---o---E---o---F---H---o---o develop
         \       \       \
          o-------o---G---o topicA

现在让我们假设你想要的提交是E,F,G和H.这是一个看起来像的图表:

                              o---o---o---E'---F'---G'---H' releaseX
                             /
o---o---o---E---o---F---H---o---o develop
         \       \       \
          o-------o---G---o topicA

首先我们要E,git rebase --onto releaseX E~1 E现在releaseX现在指向E'。

要获得F和H,git rebase --onto releaseX F~1 H现在释放X指向H'。

最后,git rebase --onto releaseX G~1 G完成了任务。

答案 3 :(得分:0)

是否可以在提交 B 时重新设置 topicA ?如果成功,则可以合并topicA_rebased到 releaseX develop ,因为他们三个都有共同的祖先 B