我在我们的内部 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”,从该分支中的( , , ) 中挑选更改,然后合并该分支时不时地进入。A5
B
B
B4
B5
B6
A
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 术语/关键字来搜索。)