我的团队正在研究git中的共享主题分支,我将称其为“topic1”。我正在研究一个由topic1构成的分支上的一些代码的重构,我将称之为“重构”。我一直在定期将topic1合并到重构中,以便能够随时更新变化,但是尚未将重构合并回topic1,因为重构仍在进行中。将基于主题分支的分支的更改合并到git中的其他主题分支
还有一个主题分支,我将其称为“topic2”,它最近由主人创建。我想要做的只是合并我对“重构”所做的更改由topic2创建的新分支,我将其称为“topic2_refactor”。 (IE的变化只能通过重构访问,但不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
(以上似乎导致合并不属于neccessary,由于一些变化,这在发生主,后来合并到重构分支冲突。)
我希望有是一个干净的方法,可以避免在“重构”分支历史中稍后解决的不必要的合并冲突。这可能使用git rebase,git filter-branch等吗?
您的最后一段是一些最好的建议。始终从您打算合并到其中的所有东西的共同祖先开始分支。 – Cascabel 2011-04-21 20:31:05
谢谢,我会在当地的一家分店尝试。重构分支由topic1构成的原因在于,它是topic1中引入的代码的实验重构,在创建分支时还没有合并到master中(topic1已经合并到master中,但它的意图更多作为一个长期发展的分支,所以它的历史再次与主人分离。) – Eliot 2011-04-21 20:55:50
'git rebase --onto topic2 origin/topic1'似乎没有效果。 在我咨询了我的git书之后,我尝试了'git rebase --onto new_refactor origin/topic1 origin/refactor'这看起来会产生相同的合并冲突,当我尝试在我的问题中使用cherry-pick命令初始合并更改时,我已经在历史中进一步手动解决了冲突。 :( – Eliot 2011-04-21 21:05:03