在git存储库上设置第一次提交的父级

时间:2014-02-26 03:17:38

标签: git branch git-branch reparenting

我们在我们设置的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是这个或其他什么的答案吗?我看过how to re-parent in GitSetting git parent pointer to a different parent,但我还不清楚这是否是正确的做法。

1 个答案:

答案 0 :(得分:1)

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

这是一种简单的方法来打破所有参与者的工作,并且通常不鼓励,就像重新发布已提交的提交一样。

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

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

现在当然这不会修复以前的提交,但它也不会使它们失效。并且您仍然可以将原始历史记录为X-Z,以及与H和更高版本中的新代码的关系。