我在我们的内部 Git-repository 中有这个内部项目A,我必须从外部 Git-repository 添加和调整来自外部库的大部分代码B。我没有添加 B 的全部历史记录,我只是B3在一个提交(我们称它)中添加了所有当前代码(我们称它为A5_B3'),提交消息明确引用B3. 然后我删除了额外提交中不需要的所有内容,并在下一次提交中根据我的需要调整了代码。
A1 - A2 - A3 - A4 - A5_B3' - A6 - A7
/*
B1 - B2 - B3
"/*" = copy/cherry-pick/... (no 'real' reference/merge-point)
几个月后(以及对 的大量提交A),我需要来自外部 Git-repository 的一些更新B。我添加了远程B,当然没有检测到共同的祖先,因为B是在中间添加的并且没有历史记录。但是,我找到了使用 a 排列两个 SHA 的描述graft,因此我可以排列代码来自B“相等”(B3和A5_B3')的点。我什至设法将更改 from 合并B到A我的本地存储库 ( A18_B6') 中:
A1 - A2 - A3 - A4 - A5_B3' - A6 - A7 - ... - A17 - A18_B6'
/* /
B1 - B2 - B3 - B4 - B5 - B6
但事实证明,我无法将此合并推送到我的远程存储库A。(编辑:我得到的错误是[remote rejected] master -> master (n/a (unpacker error))。)想一想,这可能是合理的,因为我的远程远程存储库不知道B,所以它可能不知道如何/在哪里找到/添加B4,B5和B6。
B也许我可以从( B4, B5, )中挑选更改B6并将其添加到A17. 但是这种方式没有明确的合并 from B,尽管 - 当然 - 我可能会调整提交消息。(我知道,从我开始的地方没有明确的合并B3,我会回到那个。)
A1 - A2 - A3 - A4 - A5_B3' - A6 - A7 - ... - A17 - A18_B4' - A19_B5' - A20_B6'
/* /* /* /*
B1 - B2 - B3 - B4 - B5 - B6
我现在能想到的唯一“解决方案”是从(使用明确引用的分支名称)添加一个单独的“ A_B-branch”,从该分支中的( , , ) 中挑选更改,然后合并该分支时不时地进入。A5BBB4B5B6A
A1 - A2 - A3 - A4 - A5_B3' - A6 - A7 - ... - A17 - A18_B6'
/ /
AB3' - AB4' - AB5' - AB6'
/* /* /* /*
B1 - B2 - B3 - B4 - B5 - B6
同时,还添加了来自另一个外部 Git-repository 的另一个外部库的一小部分代码C。这可能会得到错误修复,所以它甚至可能使麻烦加倍......
我的问题是:
- 如果我们可以重新开始,添加(部分)B(和 C)的最佳实践是什么
- 鉴于目前的情况,有没有比这个
A_B带有樱桃挑选的“-branch”的其他/更好的解决方案
(对不起,如果这是重复的。我试图寻找类似的东西。我找到了许多关于合并具有“完整”共同历史的项目/分叉的答案。我找到了一些关于需要单个合并的类似项目的答案。但我猜稍后我可能需要进行更多的错误修复。但是,我可能缺少正确的 Git 术语/关键字来搜索。)