Git回滚代码到某个commit

回退命令:

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是一款强大的版本工具,其可能有更加简单的方法,欢迎分享.

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐