【git push操作后如何撤销】
一般来说有revert和reset两种方式
reset命令是重置
到一个记录:git reset是将之前的提交记录全部抹去,将 HEAD 指向自己重置的提交记录;
revert命令是撤回
一个记录;git revert 操作是撤回某一次提交记录,若之后又有提交,提交记录还存在。
个人建议第二种方法,即reset方法,不过要分情况,比如误提交的是我的功能开发分支,并不是prd等大分支,也没有人协作和我共用这个分支,那么我推荐用reset
方法一:revert操作:这种撤销方法会让对应撤销的代码版本移除,不过local history里还是有历史记录的
步骤一:测试push代码:
步骤二:项目根目录打开git 窗口
找到要撤销的提交:复制图中对应的版本号c605c029450fa344e2fcc79e448336c876a37181
步骤三:执行revert撤销
git revert -v 刚刚的版本号
步骤四:push(将revert操作同步到远程)
方式二:利用git reset操作回滚代码到指定版本,此种方式比直接revert要好一些,reset如果采用soft模式会保留本地代码的变化,hard则不会
步骤一:添加测试代码,并commit和push
这里我提交并push两次代码
步骤二:查看日志中的提交id,并选择要回滚到哪次的提交版 3e85ca5432b8d91127b6ae70320a2a739fcfcf4b
步骤三:执行git reset --soft 刚刚复制的提交id
然后执行 git push origin 分支名 --force
(如果本地做了修改想要提交现修改后的版本到远程就必须强行推送。因为远程仓库记录过你这个id后的版本。ps:一般协作开发同一个分支时慎用force,如果不是最新pull的代码也许会导致其余人代码丢失,一般有分支规范的公司会规定非自己的分支不让强推)
这样回到IDEA,发现本地代码又回到了当时提交前的那一次状态,然后我们不放心的话可以pull拉下最新代码,发现确实远程分支代码变化也同步了
pull操作后:
PS:看网上也有reset 然后push后 通过undo commit+ cherry-pick+ stash的方式恢复到提交前状态,感觉也是可以的