git - 删除推送到远程分支的 git commit

标签 git

我们使用 git 和 GitFlow 作为版本控制工具,我正面临一个问题,我很确定有些人已经遇到过。

在一个功能分支中,一位同事做了一个提交,其中插入了很多无用的文件(所有二进制文件和 IDE 元数据文件)。此提交已推送。现在这位同事提交了一个 pull request,我不想把所有这些无用的文件都集成到 develop 中。

现在,我的 git 存储库非常庞大,git clone 变成了一个漫长而无聊的过程......

第一个(也是简单的)解决方案是从功能分支中删除这些文件,并在没有这些文件的情况下提交(或执行 revert commit)。但如果我这样做,我的 git 存储库将保持相当大,因为对象(文件)不会从历史记录中删除(因为 git 仍然知道它们!)。

我想要的是“取消”这个提交。

下图显示了我的问题(最上面的提交是最旧的):

Graph of git repository

我怎样才能删除这个提交并使我的 git 克隆再次快速?

PS:感谢 GitGraphJS 提供了绘制 git 图的有用工具!

最佳答案

有几种方法可以删除或撤消提交。在这种情况下,您可以使用 git revertgit rebasegit reset

一个信息,与使用 git revert 相比,git rebase 不会添加一个额外的提交。 git revert 在 merge 期间添加一个额外的提交。如果你不熟悉使用 git rebase,我建议你使用 git revert 然后。

还原

git revert <commit-ID>

之后您提交更改并将该提交推送到您的源。


重置

您可以删除最后推送的提交,执行此操作后您必须推送您的分支。您可以决定将功能分支 merge 或 rebase 到开发分支。

git reset –-hard HEAD~1

git reset HEAD^ --hard

rebase

此命令将导致编辑器的交互部分,您可以从那里选择

 git rebase -i HEAD~

在交互部分,它列出了所有的提交。删除你想要摆脱的那个。完成 rebase 并将力推送到 repo。

git rebase --continue 然后推送你的分支。

关于git - 删除推送到远程分支的 git commit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44441116/

相关文章:

git - 在交互式 rebase 之后,本地 Git 分支已经偏离原点

Github远程: Invalid username or password.致命:身份验证失败

git - 是否可以追溯地将一组提交变成一个分支?

javascript - 如何使用 React 创建分页

git - git 命令 - checkout 和 switch 之间的区别

git - 使用 GULP-GIT 一次添加、提交和推送

git - 如何从不同分支中的特定提交创建分支

Git diff 报告本地更改 'old mode'/'new mode'

java - 将 Git 文件替换为新文件

git - 拆分文件时保留 git 历史记录