繁体   English   中英

重新引入合并提交

[英]Rebase a merge commit

假设我的Git存储库最初有两个分支:Foo和Bar。

... ─ Foo

... ─ Bar

我创建了第三个分支,FooBar,其中我提交了另外两个分支的合并。

... ─ Foo ──┐
            FooBar
... ─ Bar ──┘

FooBar现在领先于Foo和Bar。 接下来,我做了一些工作,仅在Foo上做了几次。

... ── A ───┬── B ── C ── D ── Foo
            FooBar
... ─ Bar ──┘

问题是:由于分支FooBar的第一个父亲不再是Foo,我可以在分支FooBar中重新合并提交以再次将Foo和Bar作为其两个父母吗? 换句话说,我可以将Foo中的开发项目与未更改的Bar一起合并到之前合并的FooBar中吗?

... ── A ── B ── C ── D ── Foo ──┐
                                 FooBar
... ─ Bar ───────────────────────┘

我意识到这是一个相当古老的话题,但是因为我在面对类似的情况时发现了这个问题,我还可以告诉我到底使用了什么。

git checkout FooBar
git rebase -p --onto Foo A

我试图使用原始问题中的名字。 特别注意, A表示在ascii art中标记为A的提交。 您可能会使用提交的哈希值或任何其他方式指向分支FooFooBar最初分离的提交。

-p标志也称为--preserve-merges ,它的功能与它所说的非常相似。

请注意,分支Bar在此处不起作用,因此提交行可能是命名分支,或者不是 - 它没有区别。

你不能在分支FooBar下重新定义而不改变定义FooBar 你能做的就是合并FooBarFoo 这将具有您想要的相同内容。

你基本上试图擦除先前合并的所有痕迹。

如果你真的想扔掉所有只存在于FooBar (和工作目录)中的提交,那么按以下步骤操作:首先执行git checkout FooBar ,然后让git忘记它的历史并执行git reset --hard Foo (如果你打算将Bar合并到Foo )。 然后使用git merge Bar重新创建git merge Bar

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM