我的团队正在git中开发一个共享主题分支,我将称之为“topic1”。我在用topic1制作的分支上重构一些代码,我称之为“重构”。我一直在周期性地将topic1合并到重构中,这样我就可以保持最新的更改,但是没有将重构重新合并回topic1,因为重构仍在进行中。
还有另一个主题分支,我称之为"topic2“,它是最近创建的。我想做的只是将我在“重构”上所做的更改合并到topic2的一个新分支中,我称之为“topic2_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重基、git过滤分支等?
发布于 2011-04-21 19:55:16
您可以使用git rebase
选项尝试--onto。这允许重基操作根据“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 (重构后)都需要再次合并到主服务器时,您可能会遇到麻烦,因为它们将有所有相同的重构提交。不过,吉特在这方面通常很不错。
由于重构似乎独立于这些主题分支,所以我会考虑将重构分支从母版重新定位,这样在重构完成后,您可以将这些更改合并到两个主题中。
https://stackoverflow.com/questions/5748930
复制相似问题