Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将基于主题分支的分支的更改合并到git中的不同主题分支_Git_Git Branch_Git Rebase_Git Merge_Cherry Pick - Fatal编程技术网

将基于主题分支的分支的更改合并到git中的不同主题分支

将基于主题分支的分支的更改合并到git中的不同主题分支,git,git-branch,git-rebase,git-merge,cherry-pick,Git,Git Branch,Git Rebase,Git Merge,Cherry Pick,我的团队正在git中的一个共享主题分支上工作,我将其称为“topic1”。我正在对topic1分支上的一些代码进行重构,我将其称为“重构”。我一直在定期将topic1合并到重构中,以便随时了解最新的更改,但是,由于重构仍在进行中,所以没有将重构合并回topic1 还有另一个主题分支,我称之为“topic2”,它是最近在master上创建的。我想做的是只将我在“refactor”上所做的更改合并到topic2的一个新分支,我将其称为“topic2_refactor”。(即,提交中的更改只能由ref

我的团队正在git中的一个共享主题分支上工作,我将其称为“topic1”。我正在对topic1分支上的一些代码进行重构,我将其称为“重构”。我一直在定期将topic1合并到重构中,以便随时了解最新的更改,但是,由于重构仍在进行中,所以没有将重构合并回topic1

还有另一个主题分支,我称之为“topic2”,它是最近在master上创建的。我想做的是只将我在“refactor”上所做的更改合并到topic2的一个新分支,我将其称为“topic2_refactor”。(即,提交中的更改只能由refactor访问,而不能由topic1访问。)

我知道如何看到这些变化:

git log origin/refactor --not origin/topic1
所以我想做的是这样的事情-但是这个语法不正确:

git checkout topic2
git checkout -b topic2_refactor
然后这个:

git merge origin/refactor --not origin/topic1
或者这个:

 git cherry-pick origin/refactor --not origin/topic1
(上述情况似乎导致了不必要的合并冲突,这是由于主服务器上发生了一些更改,这些更改后来被合并回重构分支。)


我希望有一个干净的方法来做到这一点,并避免不必要的合并冲突,这些冲突后来在“重构”分支的历史中得到了解决。使用git-rebase、git-filter-branch等是否可能实现这一点?

您可以使用该选项尝试
git-rebase
。这使得重新基础操作能够根据“topic1”从“重构”分支获取需要应用的差异,然后将其应用到“topic2”

git co refactor
git co -b topic2_refactor
git rebase --onto topic2 topic1 # bases the diffs off of topic1, but applies them to topic2
你的成功可能会有所不同。仍然可能会发生有问题的冲突。这样做的缺点是,现在您将有两个单独的重构分支,它们具有相同的更改,但由于这是一个重基,它们具有不同的历史记录,如果您不小心的话,它们很容易发生分歧(您必须不断地从一个分支到另一个分支或类似的分支)

然后,当topic1和topic2(重构后)需要再次合并到master中时,您可能会遇到麻烦,因为它们将具有所有相同的重构提交。虽然git通常很好地解决了这个问题


由于重构似乎与这些主题分支无关,所以我会考虑将主分支的重构分支重新设置,这样,当重构完成时,您可以将这些更改合并到两个主题中。

最后一段是一些最好的建议。总是从你想要合并到的所有东西的共同祖先开始分支。谢谢,我要在本地分支上尝试一下。重构分支脱离topic1的原因是,它是topic1中引入的代码的实验性重构,在创建分支时,这些代码尚未合并到master中(topic1后来被合并到master中,但它更多的是作为一个长期的开发分支,所以它的历史再次与master不同。)
git-rebase--topic2-origin/topic1
似乎没有效果。在查阅了我的git书籍后,我尝试了
git-rebase--to-new\u重构origin/topic1-origin/refactor
这似乎产生了与我在问题中尝试使用cherry-pick命令最初合并更改时看到的相同的合并冲突-冲突我已在历史记录中进一步手动解析:(