怎么删除git远程仓库上某次commit

不小心用自己的github账号连接上公司git远程仓库,而且还提交上去了,怎么删除掉这次提交啊

阅读 11.2k
2 个回答

先补充一下。
楼上说的那个 git reset --hard 是把 HEAD 回滚到某个 commit。如果你要回滚的 commit 是最新的,那可以这么做。同样,git reset --hard HEAD^ 或者 git reset --hard HEAD~1 都可以起到同样的效果。
对于 git revert 就不同了。git revert 并不会 删除某条 commit,而是会创建一条新的 commit 用来回滚某条 commit 的改动。

个人觉得,如果你不打算新创建 branch (然后再 cherry-pick),那最省事儿的办法是用 git rebase --onto

比如目前代码库中,master branch 上有如下几条 commits:

A - B - C - D - E - F - G

你想把 D 那条 commit 删掉,前面的都要,后面的也都要。那么你应该执行:

git rebase --onto master~4 master~3 master

之后,你的 commit history 就是:

A - B - C - E' - F' - G'

然后你 git push origin master -f 就行了


要注意的是,这样做会 彻底 删掉那条 commit。唯一的找回方式是通过 git reflog

问题中你说你用自己的账户提交了。如果你只是想改下那条 commit 的 author,那对于上面的情况中的 D:

A - B - C - D - E - F - G

这样就行:

git rebase -i C

把 D 那条 commit 前面的 pick 改成 edit

然后

git commit --amend --author="xxxxxxxx"

然后

git rebase --continue

如果这次commit你彻底不想要,比如不想让它显示在提交历史中。确保还没其他人提交之前,进行强制回滚。

git reset --hard [commit-id] # 你提交的前一次commitid
git push -f origin branch-name
操作不可挽回,谨慎使用。这样做了你的提交就彻底找不回来了

撤销你之前的提交并产生一次新的提交,你的提交还会保留在提交历史中。

git revert HEAD~1 # 往前回滚N次
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进