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

Kit*_* Ho 22 git git-rebase

我有这样的主分支..

A -- B -- C -- D -- E -- HEAD
Run Code Online (Sandbox Code Playgroud)

是否有任何命令可以删除旧提交之一并保留其他提交,比如提交C?

最后它变成了这样

A -- B -- D -- E -- HEAD
Run Code Online (Sandbox Code Playgroud)

我知道我们可以使用反向补丁并应用带有反向补丁的新提交来删除提交C,但树结构不会那么清晰并且看起来很笨重,即

A -- B -- C -- D -- E -- C(apply reverse patch) -- HEAD
Run Code Online (Sandbox Code Playgroud)

有谁知道?

Gra*_*and 30

使用交互式rebase.例如,要返回5次提交:

git rebase -i HEAD~5
Run Code Online (Sandbox Code Playgroud)

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

  • 如果你把它推到别的地方,请不要这样做. (8认同)
  • 通常的例外情况是,你确定你是唯一一个使用遥控器的人. (7认同)
  • 通过惯例附录,如果您通知所有其他开发人员并且他们能够在他们的结尾处修复它也是可能的 (7认同)

Rya*_*art 5

交互式变基可以工作,但是只需一个命令即可完成:

git rebase --onto B C
Run Code Online (Sandbox Code Playgroud)

仍然可以在“交互式变基”答案上看到注释。它们也适用于此。