git-reset
2017-05-05 本文已影响0人
fuweiwei
工作中出现如下的问题:
一次上线之前将可以上线的分支A合并到了master中,并将合并以后的分支推送到了远程分支中去,后续上线以后的测试操作中,发现新上线的功能不完善,需要重新下线重新操作。而此时代码已经共享,但还好没有其他工作伙伴从最新的master分支中拉取代码进行研发,此时需要进行的是代码的回滚操作,且需要的是后续还有进行之前分支A合并到新的master中。
网上查询资源发现 git-reset 可以实现上述的功能。
This form resets the current branch head to <commit> and possibly updates the index (resetting it to the tree of <commit>) and the working tree depending on <mode>. If <mode> is omitted, defaults to "--mixed".
如下是操作的详细记录:
先使用git reset 将当前的代码回滚到某一个操作。
git reset --hard c8c72b78f7f81ed6c7877dc3049963f206f89a12
然后强制推送到远程分支中
git push -f origin master
remark:此时发现,由于此种操作的权限需要的是master的操作,但在gitlab的环境下发现,已经授权master操作的,依旧没办法将代码强制推送,这时候去查看intellij IDEA的操作环境中的protected的分支,也是设置的可以force push的,依旧无法推送,最后进入到gitlab的后台中,将当前的受保护的分支master设置为unprotected,然后重新进行代码推送,这时候发现代码成功的推送了上去。
注意
使用git-set的操作命令,会将操作的历史记录信息进行清空,就好像没有操作过一样,所以这样的操作方式,我们需要慎重的去对待!!!