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

Posted

技术标签:

【中文标题】在不使用反向补丁的情况下从分支中删除旧的 Git 提交? [复制]【英文标题】:Remove an old Git commit from a branch without using a reverse patch? [duplicate] 【发布时间】:2011-10-09 12:26:19 【问题描述】:

我有一个这样的主分支..

A -- B -- C -- D -- E -- HEAD

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

终于变成了这个样子

A -- B -- D -- E -- HEAD

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

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

有人知道吗?

【问题讨论】:

【参考方案1】:

交互式变基有效,但只需一个命令即可:

git rebase --onto B C

仍然在“交互式变基”答案中看到 cmets。它们也适用于此。

【讨论】:

执行此命令并以冲突结束时是什么意思?你能提供一些实际的例子吗?【参考方案2】:

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

git rebase -i HEAD~5

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

【讨论】:

如果您已将其推送到其他地方,请按照惯例警告不要这样做。 除了习惯性的例外,您确定您是唯一使用您推送到的遥控器的人。 按照惯例,如果您通知所有其他开发人员并且他们能够最终修复它也是可能的 @Graham:我发现它有效。但是在编辑器中,有不同的命令,我该如何应用这些命令?即,除了删除该提交行之外,还有 squash、pick 等? @Kit:只需阅读显示在编辑器窗口底部的帮助文本。根据每次提交的需要,将“pick”一词替换为“edit”或“squash”,或者删除不需要的行。

以上是关于在不使用反向补丁的情况下从分支中删除旧的 Git 提交? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

我可以在不执行合并的情况下从主干更新分支吗?

如何在不从磁盘中删除文件的情况下 git rm 文件? [复制]

从当前工作目录中未提交的更改创建一个 git 补丁

如何在不使用 for 循环的情况下从列表中删除元素?

在不知道对象索引的情况下从数组中删除对象?

问题:机架被占用。是不是可以在不使用流程图的情况下从机架系统中删除代理?