2

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

Git repo a:CoreProduct

Git repo b:SpecificCustomerProduct,它是从 a

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

现在,我们已经在 b 中完成了一些提交,我们希望重新回到 a 中(并且 a 中的新内容也需要像往常一样归结为 b)

问题:让这些特定的提交从 b 到 a 的最佳方式是什么,以使我们从 a 到 b 的更常规的合并尽可能轻松地向前推进?

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

我正在考虑从 b 中挑选提交到 b 上的临时分支,然后将该分支“拉取”到 a,但我担心这会影响未来从 a 到 b 的合并。

4

2 回答 2

4

假设你的 repo 有这样的结构:

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

我的建议是:

(1) 以防万一,先用git branch bak_A branch_Aand备份你的分支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

于 2013-04-19T02:08:16.090 回答
1

为了使将来的事情尽可能轻松,请确保 B 是最新的与来自通孔的更改mergerebase然后执行与 A 相反的过程。 cherry-pick这不是一个好主意,因为这会创建一个新的提交 sha不会在历史中共享,并且可能会在未来造成麻烦。

从 B 到 A做 amerge是最简单的方法,并且可以让事情顺利进行。历史将显示来自 B 的提交,它不应该引起任何问题。

于 2013-04-19T00:40:08.377 回答