一、背景
有时候,工作时会错误地对一些修改进行commit并push到远程,这时候想回滚这部分commit,并且远程分支也同步回滚
二、git 操作
首先,查看需要回滚到哪个commit-id
处
git log
# 如果需要查看详细的改动,可以尝试使用如下命令
git log -p
接着,回退到具体的commmit-id
处(注意,reset --hard
是不可逆的,详细查看reset --hard
和 reset --soft
的区别)
# 本地git
git reset --hard <commit-id>
# 特殊情况:如果本地还有没有提交的变更
git stash
git reset --hard <commit-id>
git stash pop
最后,强制使用本地变更覆盖remote ref
代码语言:txt复制# remote git 同步
git push --force-with-lease origin <mybranch>
三、实战
需要修复branch my-test-branch
$ git branch
* my-test-branch
master
需要回滚到0d1d7fc32e5a
中
$ git log
commit a867b4af366350be2e7c21b8de9cc6504678a61b`
Author: Me <me@me.com>
Date: Thu Nov 4 18:59:41 2010 -0400
blah blah blah...
commit 25eee4caef46ae64aa08e8ab3f988bc917ee1ce4
Author: Me <me@me.com>
Date: Thu Nov 4 05:13:39 2010 -0400
more blah blah blah...
commit 0766c053c0ea2035e90f504928f8df3c9363b8bd
Author: Me <me@me.com>
Date: Thu Nov 4 00:55:06 2010 -0400
And yet more blah blah...
commit 0d1d7fc32e5a947fbd92ee598033d85bfc445a50
Author: Me <me@me.com>
Date: Wed Nov 3 23:56:08 2010 -0400
回滚 && 同步
代码语言:txt复制git reset --hard 0d1d7fc32e5a947f
git push --force-with-lease origin my-test-branch