gpt4 book ai didi

git - 如何 merge 来自分支中代码相同但历史不同的两个 git 存储库的代码?

转载 作者:太空狗 更新时间:2023-10-29 14:30:58 28 4
gpt4 key购买 nike

我有两个项目。一个是原来的OSS项目。另一个我们会错误地称为“fork”的是原始项目分支的副本。

fork 中的代码是从 Github 的源代码 zip 导入的。 (我非常清楚这不是你做事的方式,但我之前的一个团队这样做了,我现在必须处理后果。我希望在做出这个决定时我在身边反对它, 但它就是这样,现在需要正确修复)。

问题:

  • fork 中的代码包含标签1.2.0 的原始项目代码。 fork 中的代码在它的 master 中。

  • fork 包含不属于原始项目的修改。

  • 可以预料,原来的项目也继续它的生命,现在已经达到版本 1.6.0

我想重新开始并执行以下操作:

  • (真的) fork 原始项目(及其所有历史记录)。

  • 创建一个基于原始 1.2.01.2.0-modified 分支。

  • 从存储库中获取更改和修改并将它们应用到 1.2.0-modified。 (我已经尝试过 rebase ,在 merge 期间进行一些手动更改后,我能够获取要构建的代码)。

  • 如果我想继续前进并 rebase 到 1.6.0,我现在想知道最好的行动方案是什么。

请记住,原始项目和“ fork ”都发生了变化,所以我希望能够保留双方的历史记录。

执行此操作的正确方法是什么?

显然,我已经将两个 Remote 都添加到新的 fork 中进行修改,并且我已经获取了它们。

问题是,在对分支的 1.2.0 的更改进行 rebase 之后,虽然我确实解决了冲突并正确构建,但当我尝试 re-based 到 1.6 时.0,它似乎再次重新应用相同的修复程序,我认为这是因为原始分支不是基于 1.2.0-modified

有没有聪明而简单的方法解决这个问题?

最佳答案

你有这种情况(时间从左到右流动):

--o--2--o--3--o--o     original

X--o--o--o fork

如果你知道第一次提交 X在你的 fork 历史匹配(完全或大部分)提交 2 (假设它被标记为 v1.2.0 ),您可以将历史记录拼接在一起

git replace --graft X v1.2.0

这创造了这个虚假的历史:

--o--2--o--3--o--o     original
\
X--o--o--o fork

现在您可以轻松使用git rebase将您的更改与原始历史联系起来。你得到:

--o--2--o--3--o--o     original
\
o--o--o fork

现在您可以使用git replace -d 去除移植物| (不过我不确定如何使用这个版本)。


编辑:在 original 中标记了一些提交与 3 (假设它被标记为 v1.3.0 )来处理评论。

关于git - 如何 merge 来自分支中代码相同但历史不同的两个 git 存储库的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56563627/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com