git撤回push代码方法 分支受保护 不受保护时 详解
1.分支受保护时用revert
1.先说结果:
如果分支受保护,那么就不能reset方法来撤回,原因后面说。那么需要通过revert来撤回。
2.可以的方法:
git revert能够生成一条revert记录,与commit记录相似,那么我理解的是:提交内容虽然撤回,提交记录还是向前的,不会低于orgin的版本。
git revert命令详解:git revert SHA,SHA指需要撤销的commit的SHA(我是先撤最近一次,再撤第二次,可在本地看到每次更改的代码),SHA可在git commit的那条记录中复制过来,如图。
![在这里插入图片描述](https://img-blog.csdnimg.cn/72b71fb4280644e9afec0d63749c472e.png)
3.commit push
在revert之后,要像平常提交commit一样,push到远程,在远程分支上才能够有变化。
总体代码如下:
git revert SHA
git commit ....
git push origin <branch>
2.分支不受保护时可用reset
1.为什么保护分支要用revert不能用reset?
这就涉及到reset和revert的区别了,还是那个道理:reset仅回退版本,revert在回退的同时产生新的提交记录。
reset的代码(再次提醒,reset只是撤回了本地的commit),push时会提醒版本落后于origin。
于是强制push到远程,但是受保护的分支不允许强制push。(那么我先pull一下远程代码呢?瓦!这样就更错误了,远程是没有撤销之前的代码)。
所以只能通过revert来解决。
2.reset方法的代码
git reset --soft [版本号]/HEAD~N
git push --force
3.reset详解
具体地,解释reset命令用法,参考原文链接:https://blog.csdn.net/chenxi_li/article/details/108124186
回退版本使用git reset,其中这条命令中又分为两种
git reset --soft
git reset --hard
在我们git push成功提交后,若想要撤销这次提交,可以用git reset命令,如下
git reset --soft [版本号]/HEAD~N
git reset --hard [版本号]/HEAD~N
上面的区别是,git reset --soft会保留本地仓库代码的修改,git status可以保留提交之前最后的状态,可以再次git commit,git push。而git reset --hard不会保留本地仓库代码的修改,会一并撤销掉这笔提交本地仓库的代码修改。git reset –soft HEAD~1 回退到上一个版本,即git add . 后的内容
3.1获取版本号两种方式
git reflog 查看自己提交的各种版本
git log 查看所有人提交的版本
git reset --soft d5f66a591d9c0c909c9b8a9379c1cc8e9b283ae4
// 或者
git reset --hard d5f66a591d9c0c909c9b8a9379c1cc8e9b283ae4
常用:回退到上一个push前(add后的)
git reset --soft HEAD~1
// 或者(同上效果一致)
git reset --soft HEAD^