git代码库回滚: 指的是将代码库某分支退回到以前的某个commit id
【本地代码库回滚】:
git reset –hard commit-id :回滚到commit-id,讲commit-id之后提交的commit都去除
git reset –hard HEAD~3:将最近3次的提交回滚
【远程代码库回滚】:
这个是重点要说的内容,过程比本地回滚要复杂
应用场景:自动部署系统发布后发现问题,需要回滚到某一个commit,再重新发布
原理:先将本地分支退回到某个commit,删除远程分支,再重新push本地分支
操作步骤:
1、git checkout the_branch
2、git pull
3、git branch the_branch_backup //备份一下这个分支当前的情况
4、git reset –hard the_commit_id //把the_branch本地回滚到the_commit_id
5、git push origin :the_branch //删除远程 the_branch
6、git push origin the_branch //用回滚后的本地分支重新建立远程分支
7、git push origin :the_branch_backup //如果前面都成功了,删除这个备份分支
如果使用了gerrit做远程代码中心库和code review平台,需要确保操作git的用户具备分支的push权限,并且选择了 Force Push选项(在push权限设置里有这个选项)
另外,gerrit中心库是个bare库,将HEAD默认指向了master,因此master分支是不能进行删除操作的,最好不要选择删除master分支的策略,换用其他分支。如果一定要这样做,可以考虑到gerrit服务器上修改HEAD指针。。。不建议这样搞
参考资料:https://review.typo3.org/Documentation/access-control.html#category_push
git reset –hard,是根据HEAD内容,将工作区重置,也就是将所有的修改而没有commit的内容舍弃。
1、–hard参数将重置index和workspace,
2、HEAD是一个指针,指向最近的提交,git reset –hard就相当于git reset –hard HEAD,表示用最近的提交重置index和workspace。
3、因为HEAD本来就指向最近的commit,所以执行git reset –hard后HEAD内容并没有变化。
4、它所差生的影响就包括引用
根据HEAD内容,将工作区重置,也就是将所有的修改而没有commit的内容舍弃。
高级用法:git reset –hard 之后的回滚
# 显示之前所有git操作记录 git reflog git reset --hard# 合并指定commit git cherry-pick
改写提交
- 修改最近提交,指定git commit –amend选项执行提交的话,可以修改同一个分支最近的提交内容和注解。
- 取消过去的提交:git revert可以取消指定的提交内容。使用后面要提到的rebase -i或reset也可以删除提交。但是,不能随便删除已经发布的提交,这时需要通过revert创建要否定的提交。
- 遗弃提交:reset可以遗弃不再使用的提交。执行遗弃时,需要根据影响的范围而指定不同的模式,可以指定是否复原索引或工作树的内容。
- 提取提交:git cherry-pick,您可以从其他分支复制指定的提交,然后导入到现在的分支
- 改写提交的历史记录: git rebase指定i选项,您可以改写、替换、删除或合并提交。
- 汇合分支上的提交,然后一同合并到分支:merge的特殊选项:squash,用这个选项指定分支的合并,就可以把所有汇合的提交添加到分支上。
扩展阅读练习:
https://backlog.com/git-tutorial/cn/stepup/stepup7_1.html
原创文章,转载请注明:转载自Web开发笔记 | git代码库回滚
本文链接地址:https://www.magentonotes.com/git-reset-code-workplace.html
Comments on this entry are closed.