git rewrite 提交父级?

git rewrite 提交父级?

我有两个基于父级的提交:P -> A -> B

我希望它们基于另一个父级:P' -> A' -> B'

编辑:我的情况是我正在与其他团队成员合作。我们有一个中央 git 存储库。在我的配置中,“git pull”会进行变基,而对于其他配置,它会创建合并。时不时地,当我发出“git pull”时,git 会开始对我没有执行的提交进行变基,我需要解决我没有编写的代码的冲突。这很耗时,而且容易出错。

我认为原因是发生了类似的事情:

        /--A--B---- // my repository
       /
--C1--C2--------M-  // the remote
   \   M       /
    \-D-M'-E--/     // another developer

因此,开发人员合并 C2,然后推送他的更改,这会让 git 认为某些提交是新的(这只是我的猜测)。最终我不得不重新定位其他人的提交。

答案1

我们假设以下情况:

        A---B (topic1)
       /
...---P---C---D (topic2)

如果你当前的分支是“topic1”,你可以通过发出git rebase topic2 topic1(或只是git rebase topic2)将提交 A 和 B 移动到 topic2 分支。然后 repo 图将如下所示

                A'--B' (topic1)
               /
...---P---C---D (topic2)

其中提交 D 就是您认为的 P'。请注意,新的父提交不需要更改。

或者,更一般地,如果您需要将某些提交移动为任何提交的后代(不一定是分支的头部),则可以使用--onto参数:

         A---B (topic1)
        /
...Q---P---C---D (topic2)

git rebase --onto topic2~3 topic1~2 topic1或者git rebase --onto Q P topic1其中 Q 和 P 是提交的 SHA1。

     A'--B' (topic1)
    /
...Q---P---C---D (topic2)

如果这些不是您想要的,您能否进一步解释一下您的情况?

相关内容