我的团队正在 git 中开发一个共享主题分支,我将其称为“topic1”。我正在对由 topic1 构成的分支上的一些代码进行重构,我将其称为“重构”。我一直在定期将 topic1 合并到重构中,以便我可以及时了解更改,但没有将重构合并回 topic1,因为重构仍在进行中。
还有另一个主题分支,我称之为“topic2”,它是最近从 master 创建的。我想做的只是将我对“重构”所做的更改合并到一个由 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
(以上似乎导致了不必要的合并冲突,因为 master 上发生了一些更改,后来又合并回了重构分支。)
我希望有一种干净的方法来做到这一点,并避免不必要的合并冲突,这些冲突后来在“重构”分支的历史中得到解决。这可能使用 git rebase、git filter-branch 等吗?