回退命令:
git reset --hard HEAD^ 回退到上个版本
git reset --hard HEAD~3 回退到前3次提交之前,以此类推,回退到n次提交之前
git reset --hard commit_id 退到/进到,指定commit的哈希码(这次提交之前或之后的提交都会回滚)
回滚后提交可能会失败,必须强制提交
强推到远程:(可能需要解决对应分支的保护状态)
git push origin HEAD --force
一直在使用git作为版本管理器,但是有一次线上出问题,但是又有未通过完整测试的代码在mater分支上,那么所需要的操作就是
回滚代码到上一个已通过测试的master版本
-> 修复bug
-> 发布
-> 还原master
-> 合并修改了bug的分支
-> 重新上预发布
,
那么下面开始演练.
为了简单描述,我们把定义几个分支.
init-master //最初的master
untest-master //未完全通过测试的master,其是远程仓库上最新的master
bugfix/fix_some_bug //修改的bug分支
拉取untest-master
首先是切换并更新master,注意此时的master是untest-master
,也就是我们要对其进行回滚操作
git checkout master
git pull origin master
回滚到init-master
回滚操作首先需要定义到要回滚到的提交记录,然后强制回滚到该记录上,注意这里的操作只是对本地分支的操作并不会影响到远程分支
//使用git log查看其提交记录,确定要回滚到的`commit id`
git log
g reset --hard [commit id]
回滚远程master
回滚操作是把你当前的分支强制提交到master上也就是加-f
参数指明强制覆盖,该命令需要你有相应的master权限.这样的话master上就是之前的版本了.那么接下来就是一般的修改bug了.
git push -u origin master -f
修复bug,并发布
bug的修复是在当前init-master
分支的基础上,切出一个新的分支,然后像平常一样修改提交,最后合到init-master
上.
git checkout -b bugfix/fix_some_bug
// 修复bug
// 发布
取消回滚
取消回滚则是重新强制恢复到修改过的版本,然后就可以强制回滚到任意版本了
git reflog 查看该分支的变动,可以确定其commit id
git reset --hard [commit id]
合并修改了bug的分支
这次回滚后你处在untest-master
分支上,该分支上是没有bugfix/fix_some_bug
修复bug的代码的,那么把他合并过来.然后推送上去,那么master就是当前最新的版本了
git merge bugfix/fix_some_bug
git push origin master
以上是操作是必须需要有master权限的,否则无法回滚,另外如果担心代码丢失那么在untest-master
分支上再次checkout一个分支,这样即使master再怎么变,这个分支仍然是untest-master
的副本.
最后git是一款强大的版本工具,其可能有更加简单的方法,欢迎分享.