工作总结之使用git标签回滚代码
工作总结之使用git标签回滚代码
背景
要求研究如果上线的代码出现问题如何使用git打标签的方式回滚版本
git标签回滚代码(探究过程)
- 先制造三次提交
- 打上tag并查看(命名规范采用分钟+时间的方式)
- 再提交第四次,并且另一端也获取到的最新代码
- 回滚到第三次并且不更改本地文件(--soft参数)
现象:第四次提交的内容idea已经让它变成了修改提示 - 然后另一端pull一下,准备进行第五次提交
现象:pull的时候同步处的数字为1(图片没有体现出来,忘截图了),表明其实git已经知道远程有变化了,但是,pull拉取不了这个变化,当我准备进行第五次提交时,同步处的数字变为了2,因为前面感知到的变化加上接下来的第五次修改,所以为2呀 - 小插曲,由于另一端是ubuntu,笔者不知道怎么配置https的方式提交代码,找了一圈也没有发现,于是只得重新用ssh拉取代码
现象:重新ssh拉取后的代码被重置回了第三次提交 - 补上第四次提交(因为需要再次重置回第三次,看另一端的情况)
- 再次重置回第三次
git reset --soft 9e6381c
git push -f origin test
ps:9e6381c是commit_id的前七位,七位足够了;-f是强制提交,因为本地版本落后于远程,需要强制提交,否则会失败
9. 另一端pull一下,再次准备进行第五次提交
现象:同步骤5
10. 另一端进行push
现象:另一端push成功之后,会在不知情的情况下提交之前被丢掉的代码,所以由此可见,回滚分支之后,另一端(其他人)最好重新克隆一次代码
11. 最后再验证一下,是不是因为vscode的原因在pull的时候无法识别远程已被重置的代码
- 先在另外的位置(merge-code2)单独克隆一份该项目,使用idea打开,保持最新;再一次(最后一次)回滚到第三次提交(位于merge-code)
- 使用连idea拉取,查看是否能拉取到回滚之后的变化
现象:idea也不能拉取到回滚之后的变化
总结
tag的作用仅仅是针对每一次的commit,仅仅起到一个提示作用,比起commit_id要更容易理解;
通过tag找到commit_id来回滚代码更易于操作,不足之处在于,其他人不能拉取到回滚之后的变化,只能通过重新克隆的方式来拉取到这个变化;
有人可能会想到用revert,因为每一次revert都相当于一次提交,可是如果有很多次提交,操作起来会相当繁琐。