1

我们在我们建立的 git 存储库中跟踪供应商的软件产品的上游版本发布。我们在克隆的 git 存储库中对此产品进行了更改。当新版本发布时,我们git merge会将更改添加到自定义存储库中,并修复它们的更改与我们的更改之间的任何合并冲突。

供应商以我们的本地语言和全球语言提供版本。我们只跟踪本地语言,但现在在 10 个合并版本之后,我们意识到我们需要跟踪全球语言,以便我们可以从与该软件集成的其他供应商那里引入更改。

提交历史看起来像这样。每个\都是两个存储库之间的合并。

local A - B - C - D
        \       \
   custom E - F - G

我们需要它看起来像

global X - Y - Z
        \
local    A - B - C - D
          \       \
custom     E - F - G

git reparent是这个还是其他什么的答案?我已经查看了如何在 Git 中重新设置父级并将git 父级指针设置为不同的父级,但我仍然不清楚这是否是正确的做法。

4

1 回答 1

1

你真的不能那样做。更改提交的父级将导致一个全新的提交对象具有自己的唯一哈希(标识符)。这意味着所有间接将此作为父级的提交也需要更改。这个提交将是整个存储库中的第一个提交,您最终将重新创建存储库中的所有提交

这是一种简单的方法来破坏所有相关人员的工作,并且通常不鼓励使用,就像重新发布已发布的提交一样。

如果要集成原始历史记录,可以将提交 XZ 导入单独的独立分支,然后在D将它们合并到本地分支后提交。这样,您可能会产生如下结果:

global X - Y - Z -------
                        \
local    A - B - C - D - H
          \       \       \
custom     E - F - G ----- I

现在当然这不会修复以前的提交,但它也不会使它们无效。而且您仍然拥有 XZ 的原始历史,以及与 H 及更高版本中的新代码的关系。

于 2014-02-26T20:30:50.413 回答