我想知道处理这个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的合并..
答案 0 :(得分:4)
假设你的回购有这样的结构:
... --- A1(branch_A)
\
\
... ------ B1(branch_B)
我的建议是:
(1)以防万一,请先git branch bak_A branch_A
和git 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_A
和git branch -f branch_B bak_B
恢复分支。
答案 1 :(得分:1)
为了让将来的事情尽可能轻松,请确保B与来自merge
或rebase
的更改保持同步,然后将此过程反向执行A. {{ 1}}不是一个好主意,因为它创建了一个新的提交sha,它不会在历史中共享,并可能导致路上的麻烦。
从B到A执行cherry-pick
是最简单的方法,可以让事情变得简单。历史记录将显示来自B的提交,它不应该导致任何问题。