git merge了错误分支,如何优雅的回退到merge前的状态?

背景描述

当前master分支,小明和小王在中午12点分别新建了a b 分支

1.小明在a分支,下午 1 3 5点分别提交了三个commit
2.小王在b分支,下午 2 4 6点分别提交了三个commit
3.小明在a分支,在下午7点执行了git merge b,此时commit的顺序是1 2 3 4 5 6倒序,但是此时发现merge了错误分支,想回退到下午7点时的没merge的状态,即1 3 5commit状态,如何优雅的进行git回退操作?

已知git cherry-pick 解决方案,有没有更好的方法?

阅读 63.9k
3 个回答

没push的话
git reset --hard (a分支5点那个时候commit之后的sha1)
然后重新 git merge

如果没有别的操作,直接回到上一次提交就可以了,在a分支执行
git reset --hard HEAD~ 会回到未merge前的状态,清空暂存区,销毁数据,如果没有推送到远程,数据就会被覆盖无法恢复,如果已推送远程,可以通过 reflog 找回。

先查看更新的版本日志

git reflog

回退到某一个版本

git reset --hard 版本号
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进