我有两个基于父级的提交: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)
如果这些不是您想要的,您能否进一步解释一下您的情况?