自[重复]以来如何“撤消”git提交同时保留所有其他提交

Posted

技术标签:

【中文标题】自[重复]以来如何“撤消”git提交同时保留所有其他提交【英文标题】:How to 'undo' one git commit whilst keeping all others since [duplicate] 【发布时间】:2015-04-12 10:16:26 【问题描述】:

我有一个包含许多提交的 git 存储库。假设我们从过去到现在都有这些提交:

    小改动 大功能添加 小改动 小改动

现在我们已经确定出于商业原因应该删除这个重要功能,但我想保留此后所做的更改。

我怎样才能做到最好?

【问题讨论】:

我通常为此使用“git rebase -i HEAD~4”,删除不需要提交的行,然后就可以了。 丰富 - ***.com/questions/7099833/… 【参考方案1】:

执行交互式变基:

$ 'git rebase -i HEAD~4'

然后从列表中删除您不想要的那个。看到这个答案:https://***.com/a/13061212/1024740

【讨论】:

【参考方案2】:

git-rebase 对此太过分了,你会失去历史。

改用这个:

$ git revert <hash of commit 2>

然后,您的历史记录将显示您提交了一项功能,然后将其删除。

【讨论】:

我试过了,但它实际上是一个合并提交——哈希不起作用,它要求一个数值,但我不确定是什么值…… @RichBradshaw 在尝试恢复合并提交时,您需要根据需要评估补丁的父级告诉git revert。如果您想恢复合并的更改,您必须使用git revert -m 1 &lt;hash of commit 2&gt; 一般来说,我建议看看documentation of git revert

以上是关于自[重复]以来如何“撤消”git提交同时保留所有其他提交的主要内容,如果未能解决你的问题,请参考以下文章

git:撤消所有工作目录更改,包括新文件

iOS - Git 撤消操作(分布式版本控制系统)

在 GIT 中撤消删除

撤消 git reset --hard origin/master [重复]

如何在提交之前撤消“git add”?

如何撤消 git 中的最后一次提交,但保持我的更改未暂存?