在不使用反向补丁的情况下从分支中删除旧的Git提交?

在不使用反向补丁的情况下从分支中删除旧的Git提交?,git,git-rebase,Git,Git Rebase,我有一个像这样的主分支 A -- B -- C -- D -- E -- HEAD 是否有任何命令可以删除旧提交中的一个并保留其他的,比如commit C 最后变成这样 A -- B -- D -- E -- HEAD 我知道我们可以使用一个反向补丁并应用一个新的commit with reverse patch来删除commit C,但是树结构不会那么清晰,看起来很笨重 A -- B -- C -- D -- E -- C(apply reverse patch) -- HEAD 有人知

我有一个像这样的主分支

A -- B -- C -- D -- E -- HEAD
是否有任何命令可以删除旧提交中的一个并保留其他的,比如commit C

最后变成这样

A -- B -- D -- E -- HEAD
我知道我们可以使用一个反向补丁并应用一个新的commit with reverse patch来删除commit C,但是树结构不会那么清晰,看起来很笨重

A -- B -- C -- D -- E -- C(apply reverse patch) -- HEAD

有人知道吗?

使用交互式重基。例如,要返回5次提交:

git rebase -i HEAD~5

然后在弹出的编辑器中,删除包含要删除的提交的行。

交互式重基可以工作,但只需一个命令:

git rebase --onto B C

仍然可以看到关于“交互式重新基准”答案的评论。它们也适用于这里。

通常警告您,如果您将此推到其他地方,请不要这样做。通常的例外情况是,您确定自己是唯一一个使用您推到的遥控器的人。通常的补充是,如果您通知所有其他开发人员,并且他们能够在他们的设备上修复它,也可以这样做end@Graham当前位置我发现它有效。但在编辑器中,有不同的命令,如何应用这些命令?i、 除了删除提交行之外,还有挤压、拾取等?@Kit:只需阅读编辑器窗口底部显示的帮助文本。根据每次提交的需要,将“pick”替换为“edit”或“squash”,或删除不需要的行。执行此命令并以冲突结束时,这意味着什么?你能提供一些实际的例子吗?