我们的git存储库有一些奇怪的情况。 预期的工作流程是创建我们自己的开源项目分支,其中包含我们自己的一些内容。
回购最初是通过复制没有历史记录和“工作正常”的开源项目文件来创建的。 当我们想要更新底层开源代码库时,我们不再合并,而是再次复制文件并使用diff工具手动解析。这是我们真正想要结束的痛苦。
我们希望最终支付技术债务并开始以预期的方式使用git。我们有什么可能的方法来解决它,同时保留我们的历史,并最终拥有潜在的开源历史。 请注意,我们的项目用作子模块,因此我们无法在没有严重后果的情况下创建新的存储库。
这可以修复git的一些秘密功能和很多聪明吗?
答案 0 :(得分:2)
我这样做。
之后您可能需要添加一些更改,以便在当前上游的主服务器之上运行。也提交他们。
现在您在上游主站顶部有一个分支,可以作为拉取请求提供。它保证干净地合并(因为它在master之上,而不是从之前的提交中分支),它有你的更改,它已经通过所有测试(包括测试你的更改)。
如果您想要以前的历史记录供参考,可以选择几种方法。
最简单:将其保留在当前(非上游)回购中。它不会去任何地方,但你必须例如在不同的仓库中哄骗你的变化。
简单但有点愚蠢:在第一次提交之上的上游repo 中创建一个新分支(请参阅these instructions),并将所有历史记录推送到该分支。缺点是你的历史现在与主线的历史无关。
更痛苦的一个:识别您触及上游的点,并根据需要合并。
baseless_branch
)中创建包含历史记录的分支。 based_branch
)。baseless_branch
到based_branch
的提交范围,直到您再次从master复制文件的那一刻。master
与based_branch
合并到master
。它应该干净地合并,因为状态是相同的。 (我不知道如何在master中识别这些提交。)baseless_branch
的顶部;现在与master
合并,审核并解决冲突,添加所需的更改等。现在,您拥有自己的分支,从历史中的正确点开始增长,可选择使用与主历史记录匹配的中间合并点。那个分支也是一个很好的公关材料。