删除 git merge 提交而不发生冲突

问题描述 投票:0回答:1

下面是我的 git 提交历史记录:

HEAD
... +500 commits
A   4140759b
A   c5cf69a2
A   3e5282cb  ⎯┐   << Merge branch B
|   94936548    B
|   02a550ce    B   
A   5d09daa9  ⎯┤   << Pull request
|   afbe397b    B   << Merge branch A into B
|   74fe4f3c    B
|   86cdc993    B
|   223e1740    B
|   a7ea596a    B
|   0d4c36cf    B
A   2740d295    |
A   24437962    |
A   73725f04    |
A   90be4300    |
A   6b1720d6  ⎯┘
A   d65bf4bd
...

我想删除 B 分支历史记录并合并提交,只保留 A 分支历史记录。

但是,它们是非常旧的提交,最新提交之间有数百次提交,
所以

git rebase -i
命令造成了很多我无法解决的冲突。

d65bf4bd 和 c5cf69a2 之间的一些提交被删除也没关系。
但是,c5cf69a2 之后的最近提交不应受到影响。

如何从历史记录中彻底删除B分支历史记录?

我的预期结果如下:

HEAD
... +500 commits
pick    A   4140759b
pick    A   c5cf69a2
[drop]  A   3e5282cb  ⎯┐   << Merge branch B
[drop]  |   94936548    B
[drop]  |   02a550ce    B   
[drop]  A   5d09daa9  ⎯┤   << Pull request
[drop]  |   afbe397b    B   << Merge branch A into B
[drop]  |   74fe4f3c    B
[drop]  |   86cdc993    B
[drop]  |   223e1740    B
[drop]  |   a7ea596a    B
[drop]  |   0d4c36cf    B
pick    A   2740d295    |
pick    A   24437962    |
pick    A   73725f04    |
pick    A   90be4300    |
pick    A   6b1720d6  ⎯┘
pick    A   d65bf4bd
...
git merge commit rebase conflict
1个回答
0
投票

听起来如果你使用 rebase 交互式的话会很痛苦......实际上,你为什么要尝试交互式?如果分支 B 的 2 次合并是一个接一个,那么您应该能够像这样完成它:

git rebase --rebase-merges --onto 2740d295 3e5282cb HEAD

这应该删除 B 中的提交和 2 个合并提交。这并不是说您不会遇到冲突....您仍然会遇到冲突,但考虑到您正在使用

--rebase-merges
will 包括合并(尽管您可能仍然需要解决合并中的冲突)并且其他冲突可能与您的变化相关,包括来自
B
的变化。

© www.soinside.com 2019 - 2024. All rights reserved.