Git双向合并

时间:2013-04-18 23:08:45

标签: git merge git-merge

我想知道处理这个git场景的最佳方法:

Git repo a:CoreProduct

Git repo b:从

分叉的SpecificCustomerProduct

到目前为止,我们对a和b进行了不同的更改,并且只将a合并到b。到目前为止一切都很好 - 特定产品正在从我们的CorePoduct获得功能

现在,我们最终在b中使用一些提交,我们希望重新进入a(并且还有一些新东西需要像往常一样降到b) )

问题: 从b到a获取这些特定提交的最佳方法是什么,目的是保持我们更经常的合并从a到b尽可能轻松地向前发展?

问题: 如果我们从头开始这样做,你会怎么做?

我正在考虑将b中的提交从b转换为b上的临时分支,然后将“pull request”分支到a,但我担心这会影响将来从a到b的合并..

2 个答案:

答案 0 :(得分:4)

假设你的回购有这样的结构:

... --- A1(branch_A)
         \
          \
... ------ B1(branch_B)

我的建议是:

(1)以防万一,请先git branch bak_A branch_Agit branch bak_B branch_B备份您的分支。

(2)git checkout branch_A,进行修改(通过挑选或合并,无论你想要什么)然后提交,你将获得这样的A2(B1和A2之间的边缘可能不存在,并且没关系):

... --- A1 --- A2(branch_A)
         \    /
          \  /
... ------ B1(branch_B)

(3)git checkout branch_B,然后是git commit-tree branch_B^{tree} -p branch_B -p branch_A -m "<commit messages>" | xargs -I {} git merge {},您将获得:

... --- A1 --- A2(branch_A)
         \    / \
          \  /   \
... ------ B1 --- B2(branch_B)

其中B1和B2具有相同的内容。

(4)现在你可以像以前一样继续你的发展。如果出现任何问题,您可以按git branch -f branch_A bak_Agit branch -f branch_B bak_B恢复分支。

答案 1 :(得分:1)

为了让将来的事情尽可能轻松,请确保B与来自mergerebase的更改保持同步,然后将此过程反向执行A. {{ 1}}不是一个好主意,因为它创建了一个新的提交sha,它不会在历史中共享,并可能导致路上的麻烦。

从B到A执行cherry-pick是最简单的方法,可以让事情变得简单。历史记录将显示来自B的提交,它不应该导致任何问题。