我怎样才能删除提交给git
这个问题在这里已经有了答案:
我将阐述所有不同的方式来为您删除提交,以及何时应该使用它们。 在你做任何这些之前,我强烈建议你将分支复制到另一个分支以保证安全。
  通过执行git checkout -b copy_branch来完成此git checkout -b copy_branch ,然后通过执行git checkout -b copy_branch切换回原始分支git checkout the_branch_i_want_to_delete_from_again 
如果你已经推动了,就像你的情况一样,你可以跳到#3,但是如果你没有推动,你可以看看1和2。
1)我还没有推或者正在单独工作,我想删除的提交是最近的提交:
如果我有:A --- B --- C --- D
我想删除C和D.
  然后做git reset --hard sha_of_B 
其结果是:A --- B
  如果你已经推出了,就像你的情况一样,你仍然可以这样做,然后做一个git push --force origin the_branch ,但不建议这样做,因为你可能会让其他人搞砸这个项目。  你应该按照#3代替。 
2)我还没有推或者正在单独工作,我想移除的提交在我的分支中:
如果我有:A --- B --- C --- D
我想要删除C.
git rebase -i sha_of_B_the_commit_before_the_one_i_want_to_delete
这打开了非常有用的交互式底图屏幕:
pick sha_of_C C
pick sha_of_D D
因为git提示你“#如果你在这里删除一行,那么这个提交将会丢失。” 这就是我们要做的。
  我删除了行pick sha_of_C C ,这留给我: 
pick sha_of_D D
我用vi保存在vi中,结果如下:
A --- ---乙d
  如果你已经推出了,就像你的情况一样,你仍然可以这样做,然后做一个git push --force origin the_branch ,但不建议这样做,因为你可能会让其他人搞砸这个项目。  你应该按照#3代替。 
3)我已经推动,我正在与其他人一起工作:
如果我有:A --- B --- C --- D,我想删除C和D.
然后做
git revert sha_of_D
请注意,您可能需要在这里解决冲突,然后提交。 然后做
git revert sha_of_C
请注意,您可能需要在这里解决冲突,然后提交。
这导致:
A --- ---乙Ç--- --- d --- Reverted_D Reverted_C
这是可以安全推动的,因为你实际上只是添加了一个提交,它反转了C和D的所有更改,实质上删除了它。
  除非绝对必要,否则你通常应该避免不惜一切代价地进行git push --force 。  但是,如果你要做一个推动力,使用保护,你应该在做之前一定要制作一份你的分支。  如果你已经推动了,那么坚持#3通常是一个很好的规则。 
希望这是有帮助的。
担
删除最后一次提交
$ git reset --hard HEAD^
删除最新的2个提交
$ git reset --hard HEAD~2
您可以在本地下载分支。 然后删除提交并执行推送
$ git pull origin
$ git checkout origin/<branchname>
$ git checkout -b <branchname>
$ git reset --hard HEAD~2
$ git push origin <branchname> --force
