我们使用git和GitFlow作为版本工具,我正面临一个问题,我很确定有些人已经遇到过。
在一个功能分支中,一位同事做了一个提交,其中插入了许多无用的文件(所有二进制文件和IDE元数据文件)。这个提交被推了。现在这位同事提交了拉取请求,我不想将所有这些无用的文件整合到develop
中。
现在,我的git存储库非常庞大,git clone变得漫长而无聊......
第一个(也是简单的)解决方案是从功能分支中删除这些文件,并在没有这些文件的情况下提交(或执行revert commit
)。但是,如果我这样做,我的git存储库将保持相当大,因为对象(文件)将不会从历史记录中删除(因为git仍然知道它们!)。
我想要的是取消"这个提交。
下图显示了我的问题(最顶层的提交是最早的):
如何删除此提交并再次快速启用git clone?
PS:感谢GitGraphJS绘制git图表的有用工具!
答案 0 :(得分:7)
有几种方法可以删除或撤消提交。在这种情况下,您可以使用git revert
或git rebase
或git 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
然后推动你的分支。