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

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

现在,我的 git 仓库相当庞大,一个 git clone 就变成了一个漫长而无聊的过程...

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

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

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

git - 删除在远程分支上推送的 git commit-LMLPHP

如何删除此提交并使我的 git clone 再次快速?

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

最佳答案

有多种方法可以删除或撤消提交。在这种情况下,您可以使用 git revertgit rebasegit 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/

10-14 18:48
查看更多