赞
踩
一个新同学对上线流程不太了解,提前把代码merge了。只能用git revert进行回滚,当上线前再次合并代码,git上没有显示更改。revert大家用的比较少,很多细节可能不知晓,所以这次聊一下git revert的使用,希望大家不会用到它。
git revert
用于撤销文件,撤销文件后不会影响其他的提交。
git revert <commit-id>
:撤销某个提交
git revert -n|--no-commit <commit-id>
:撤销某个提交,但执行命令后不进入编辑界面,也就是不会自动帮你提交文件,需要手动提交,这与第1点的差别就是撤销和提交分开了。
简单来说,revert做了一个反向操作,并生成新的commitid。如果commitA中增加了几行,对commitA revert后,会生成新的commitB,内容为删除最初增加的几行,且commitB>commitA。
将过程进行复现,方便大家理解,代码用 https://github.com/shidawuhen/asap ,分支为feature_pzq_status。
创建一个新文件,并合并到master
第二次提交模拟误提交情况,内容如下。
代码merge后发现代码不应上线。
点击右侧的revert,git会自动生成一个新的revert分支revert-8-feature_pzq_status。
查看该分支的改动,可看出是将第二次提交的代码进行了反向操作。
将revert-8-feature_pzq_status重新合并到master后,便可把第二次提交的更改抵消。
合并错误代码后的处理方法如下:
找到对应的merge记录
执行revert操作
将revert产生的分支,重新merge到master,将更改抵消
当分支feature_pzq_status需真正合并master进行上线时,发现feature_pzq_status和master没有任何不同。
这是因为对于master而言,已经合并过feature_pzq_status,master包含feature_pzq_status的commitid,这些提交不会参与diff,所以不会显示出两个分支的不同。
解决方案是将revert之后产生的分支,再次进行revert。这个操作能够将本要提交的代码,放置到最新的HEAD,其commitid要比master高,所以会重新diff。
具体操作如下:
#1.从master拉出一条分支
git checkout -b revert_tmp
#2.在revert_tmp将revert的commitid再次执行revert
git revert b846b23f1f7ec4c503f54885029a12169c6db190
#3.切换到开发分支
git checkout feature_pzq_status
#4.开发分支合并revert_tmp
git merge revert_tmp
#5.推送远端
git push origin feature_pzq_status
下图为push到远端重新merge master的效果。可以看到第二次提交的内容重新合并到了master。
将master的git log展示出来,完整过一遍流程:
CommitId | Comment | Desc |
---|---|---|
9a3c3e067614d69b85574dbbf2d4c2615a136282 | Merge pull request #11 from shidawuhen/feature_pzq_status Revert “Revert “need revert”” | 将重新生成的要添加的代码和master合并,上线完成 |
aacc14457a3bd46b435f616fd455de906e668ed5 | Revert “Revert “need revert”” This reverts commit b846b23f1f7ec4c503f54885029a12169c6db190. | b846b23是revert后的commitid,在本地对该commitid再次执行revert,重新生成要添加的代码 |
e134a0a940b8921c542573c42d90058311585569 | Merge pull request #9 from shidawuhen/revert-8-feature_pzq_status Revert “need revert” | 将反向代码合并到master,抵消第二次合并产生的影响 |
b846b23f1f7ec4c503f54885029a12169c6db190 | Revert “need revert” | 在github上,对f013b7d执行revert,生成第二次合并代码的反向代码 |
f013b7dd93b324f4c435e90e148aa5ebef30b859 | Merge pull request #8 from shidawuhen/feature_pzq_status need revert | 第二次提交代码合并到master |
3be1b3ed9a188cbcf5d5d8193b67d6dbcffc4099 | need revert | 第二次提交 |
1fc6e450f148f1782ac9238b192e2f8c3be61ab4 | Merge pull request #7 from shidawuhen/feature_pzq_status git revert | 第一次提交代码合并到master |
f2ffcf13ed5fa77ee995351290fc377cea1d1e48 | git revert | 第一次提交 |
https://www.freesion.com/article/6955430124/
https://www.freesion.com/article/5604267330/
https://git-scm.com/docs/git-revert
https://blog.csdn.net/jarvan5/article/details/114028765
Git命令之回退篇 git revert git reset
https://zhuanlan.zhihu.com/p/412482122
https://blog.csdn.net/jarvan5/article/details/114028765
大家如果喜欢我的文章,可以关注我的公众号(程序员麻辣烫)
我的个人博客为:https://shidawuhen.github.io/
往期文章回顾:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。