我们使用 git 和 GitFlow 作为版本控制工具,我正面临一个问题,我很确定有些人已经遇到过。
在一个功能分支中,一位同事做了一个提交,其中插入了大量无用的文件(所有二进制文件和 IDE 元数据文件)。这个提交被推送了。现在这位同事提交了一个pull request,我不想把这些没用的文件都整合到 develop
中。
现在,我的 git 仓库相当庞大,一个 git clone 就变成了一个漫长而无聊的过程...
第一个(也是简单的)解决方案是从功能分支中删除这些文件,并在没有这些文件的情况下提交(或执行 revert commit
)。但是如果我这样做,我的 git 存储库将保持相当大,因为对象(文件)不会从历史记录中删除(因为 git 仍然知道它们!)。
我想要的是“取消”这个提交。
下图显示了我的问题(最上面的提交是最旧的):
如何删除此提交并使我的 git clone 再次快速?
PS:感谢 GitGraphJS 提供有用的工具来绘制 git 图!
最佳答案
有多种方法可以删除或撤消提交。在这种情况下,您可以使用 git revert
或 git rebase
或 git reset
。
一项信息 git rebase
与使用 git revert 相比不会增加一个额外的提交。 git revert 在 merge 期间添加一个额外的提交。如果您不熟悉使用 git rebase,那么我建议您使用 git revert
。
还原
git revert <commit-ID>
之后,您提交更改并将该提交推送到您的源。
重置
您可以删除最后一次推送的提交,这样做之后您必须推送您的分支。您可以决定将功能分支 merge 或重新设置为开发分支。
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/