我的开发分支合并了 develop ,发现代码有问题,现在需要回滚到合并之前的版本。
使用 git log 查看下最近的提交,如果有如下的提交
G1 - G2 - G3 - B1 - B2 - B3
G1 - G2 - G3 - B1 - B2 - B3
-- HEAD
------ HEAD~1
---------- HEAD~2
-------------- HEAD~3
这里分两种情况,这里要回退 B1 ~ B3
- 没有提交到服务器
可以使用如下中的一种挨个回滚
git reset --hard B1 B2 B3
git reset --hard HEAD HEAD~1 HEAD~2
注意上面的 B1 B2 B3 都是指的提交的ID
- 已经提交到服务器
如果代码已经提交了,最好使用 revert
git revert --no-commit B1 B2 B3
git revert --no-commit HEAD HEAD~1 HEAD~2
git revert --no-commit HEAD~2^..HEAD
这里 –no-commit 告诉 git 执行还原,但是不要自动提交
<rev1>..<rev2> 两个点 .. 表示范围
我这里的由于是要回退一个 merge过的提交,需要指定 -m 参数,可以使用 man git-revert 查看具体的使用方法。
man git-revert
git revert --no-commit -m 1 具体的提交ID
可以参考 回退一个错误的merge(http://web.mit.edu/jhawk/mnt/spo/git/www/howto/revert-a-faulty-merge.html)