git 怎样删除远程仓库的某次错误提交?

在网上找到一种方法:
在本地把远程的master分支删除,再把reset后的分支内容给push上去

本地仓库 彻底回退到某一个版本
git reset –hard

删除远程的master分支 (注意master前有个:)
git push origin :master

重新创建远程master分支(这跟我们第1次提交本地代码库给远程仓库的命令一样吧)
git push origin master


我的问题是除了这种比较暴力的方法,还有别的方法吗?

阅读 113.8k
7 个回答

假设你有3个commit如下:

commit 3
commit 2
commit 1

其中最后一次提交commit 3是错误的,那么可以执行:

git reset --hard HEAD~1

你会发现,HEAD is now at commit 2

然后再使用git push --force将本次变更强行推送至服务器。这样在服务器上的最后一次错误提交也彻底消失了。

值得注意的是,这类操作比较比较危险,例如:在你的commit 3之后别人又提交了新的commit 4,那在你强制推送之后,那位仁兄的commit 4也跟着一起消失了。

leftstick的回答挺清晰了,我想再补充一点:假如你只是想修改上次提交的代码,做一次更完美的commit,可以这样
(1)git reset commitId,(注:不要带--hard)到上个版本
(2)git stash,暂存修改
(3)git push --force, 强制push,远程的最新的一次commit被删除
(4)git stash pop,释放暂存的修改,开始修改代码
(5)git add . -> git commit -m "massage" -> git push

可以用git revert #sha
这个命令把#sha版本的改动回退并commit
然后再执行git push就行

不用删除远程分支 比较优雅

先把本地的代码回滚到你想要的版本在提交一次

回退可以吗?
        git revert commitid

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
logo
Microsoft
子站问答
访问
宣传栏