Git 从历史记录中删除合并提交,但保留已连接的提交

时间:2021-03-14 19:43:08

标签: git github bitbucket rebase git-reset

我有以下历史记录中最后 6 次提交的结构,都在同一个分支中:

A(merge commit)
|
|\
B \
|  |
|  C
|  |
|  D
|  |
| /
|/
E
|
F

我想删除 A 合并提交,但我想在 B 提交之前将 C 和 D 提交保留在线性历史记录中。我提到所有提交都被推送到远程。我尝试使用 reset --soft HEAD~1 删除 A 合并提交,但使用该命令,其他提交、C 和 D 也已被删除。此外,我在要删除的最后一个合并提交中有一个新的更改,我想在 B 提交中传输该修改,因为它会添加到与 B 提交中相同的文件中。

我想要的最终历史:

B
|
|
C
|
|
D
|
|
E

1 个答案:

答案 0 :(得分:1)

如果您没有任何正在进行的工作,我会这样做:

git switch mybranch # commit A
git reset --hard C
git cherry-pick B

那样,您就是在新的“mybranch” HEAD B 之上重新创建 C
之后将需要一个 git push --force(如果之前推送了该分支),因此,如果您不是一个人在该分支上工作,请务必通知您的同事。