我们在我们设置的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 Git和Setting git parent pointer to a different parent,但我还不清楚这是否是正确的做法。
答案 0 :(得分:1)
你真的不能这样做。更改提交的父级将导致具有其自己的唯一哈希(标识符)的全新提交对象。这意味着所有间接将其作为父级的提交也需要更改。此提交将是整个存储库中的第一个提交,您最终将在存储库中重新创建所有提交。
这是一种简单的方法来打破所有参与者的工作,并且通常不鼓励,就像重新发布已提交的提交一样。
如果要集成原始历史记录,可以在单独的独立分支上导入提交X-Z,然后在D
将它们合并到本地分支后提交。这样,你可能会产生这样的结果:
global X - Y - Z -------
\
local A - B - C - D - H
\ \ \
custom E - F - G ----- I
现在当然这不会修复以前的提交,但它也不会使它们失效。并且您仍然可以将原始历史记录为X-Z,以及与H和更高版本中的新代码的关系。