我有以下历史记录中最后 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
答案 0 :(得分:1)
如果您没有任何正在进行的工作,我会这样做:
git switch mybranch # commit A
git reset --hard C
git cherry-pick B
那样,您就是在新的“mybranch” HEAD B
之上重新创建 C
。
之后将需要一个 git push --force
(如果之前推送了该分支),因此,如果您不是一个人在该分支上工作,请务必通知您的同事。