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