删除在远程分支上推送的git提交

时间:2017-06-08 16:29:31

标签: git

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

在一个功能分支中,一位同事做了一个提交,其中插入了许多无用的文件(所有二进制文件和IDE元数据文件)。这个提交被推了。现在这位同事提交了拉取请求,我不想将所有这些无用的文件整合到develop中。

现在,我的git存储库非常庞大,git clone变得漫长而无聊......

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

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

下图显示了我的问题(最顶层的提交是最早的):

Graph of git repository

如何删除此提交并再次快速启用git clone?

PS:感谢GitGraphJS绘制git图表的有用工具!

1 个答案:

答案 0 :(得分:7)

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

与使用git revert相比,一个信息git rebase不会添加一个额外的提交。 git revert在合并期间添加了一个额外的提交。如果您不熟悉使用git rebase,我建议您先使用git revert

<强>还原

git revert <commit-ID>

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

重置

您可以删除上次推送的提交,在执行此操作后您必须推送您的分支。您可以决定将功能分支合并或重新绑定到开发分支。

git reset –-hard HEAD~1

git reset HEAD^ --hard

<强>衍合

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

 git rebase -i HEAD~

在交互式部分中,它列出了所有提交。删除你要删除的那个。完成rebase并将力推到回购站。

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