git - 如何从 git 历史记录中删除提交,就好像它根本不存在一样?

标签 git github

我的场景是这样的:

A->B->C->D

A 是我收到的代码的原始版本(它之前已提交,但这里没有提及)。

在 B 中,我应用了代码格式化,这引入了数百个空格更改。因此,审查代码的人发现了数以千计的更改。虽然我知道在 github 上的提交 URL 中添加 ?w=1 参数可以允许代码差异没有空格,但审阅者不接受这一点,并告诉我只需恢复到以前的格式即可。我认为处理这种情况的唯一方法是简单地从历史记录(本地和远程)中删除 C 和 D,然后再次进行更改。

我尝试了 git revert 但这似乎暂时删除了远程中的更改。下一次 git push 后,它会再次推送提交。

请建议正确的步骤,以便 C、D 从本地和远程的历史记录中完全删除,就好像它们从未存在过一样(从而重写历史记录)。

注意:

我在 MASTER 分支上,我的本地存储库与远程完全同步。

编辑:

我已经尝试过 link 中接受的答案。这是我所做的:

git reset --hard HEAD~2

然后我做了git push origin HEAD --force

但是我得到这个命令:

error: unable to push to unqualified destination: HEAD

如果我把 master 而不是 HEAD,我会得到“一切都是最新的”。

我正在 push 掌握,目前我只有一个工作分支。

最佳答案

如果你把 C 和 D 推到了 Remote 上,而其他人已经拿起了它们,那么你就无能为力,否则就有可能弄得一团糟。最好的选择是从 git revert D 开始。这将产生一个新的修订版 D',它看起来与 C 所处的状态相同。不过,D 和 D' 仍然会在 git 历史记录中。

然后,如果您愿意,您可以git revert C,最后git revert B。那么您的历史记录将类似于 A-B-C-D-D'-C'-B',并且检查 B' 将为您提供与检查 A 相同的代码。

或者你可以告诉审稿人接受并处理,因为所有这些都是***的一大痛苦。

关于git - 如何从 git 历史记录中删除提交,就好像它根本不存在一样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30146727/

相关文章:

git - 想法 : Update failed unable to access 'https://...git/' : The requested URL returned error: 500

git - 我如何信任 Git merge ?

git - 在 Mac OS X 上找到 Git 安装文件夹

git - Git 中的自动签名不起作用

Git:阻止外部用户访问特定分支

android - 我必须在 GitHub 上共享的 Android Studio 项目中的文件夹是什么?

git - 将 .git 仓库移动到父目录

android - 从 Android Studio 自动提交并推送到 GitHub

python - 如何在 GitHub 源 (Python) 上向 Heroku 添加我不想要的 secret 文件

visual-studio-2010 - 无法将 git 配置为忽略 Visual Studio 文件