git高级命令之代码回滚
2019-12-11 本文已影响0人
天草二十六_简村人
一、背景
写代码总不可能一帆风顺,一直向前迭代。有时候,我们需要进行回滚到之前的版本。
本文主要介绍git命令如何进行代码回滚。
二、代码回滚相关命令
git命令.png三、git命令的实际操作演练
1、git log
~/Documents/tag-service$ git log
image.png
2、
~/Documents/tag-service$ git revert e22c03c65ddfe3df412151f26de19f53decec3e7
缺点是:当提交代码的次数多,如果需要回滚的次数多,你需要逐个执行revert。
3、git reset 命令,git log不再出现被回退代码的痕迹。
~/Documents/tag-service$ git log
image.png
-- 8ff4e88d84022f882e79799726eb8b9fb0bbb1a5 是“日志格式统一”的提交点。
~/Documents/tag-service$ git reset --hard 8ff4e88d84022f882e79799726eb8b9fb0bbb1a5
~/Documents/tag-service$ git push --force origin master
强制重置到某个提交点,这时候,你再使用git log 查看,是看不到被重置的提交点的!
image.png
但是git reflog可以:
~/Documents/tag-service$ git reflog
image.png
~/Documents/tag-service$ git reset --hard e22c03c
HEAD 现在位于 e22c03c 测试提交1
~/Documents/tag-service$ git push --force origin master
使用git log 可以看到重置成功!
image.png
4、git rebase
操作实际上是将当前执行rebase分支的所有基于原分支提交点之后的commit打散成一个一个的patch,并重新生成一个新的commit hash值,再次基于原分支目前最新的commit点上进行提交,并不根据两个分支上实际的每次提交的时间点排序,rebase完成后,切到基分支进行合并另一个分支时也不会生成一个新的commit点,可以保持整个分支树的完美线性
5、git merge
操作合并分支会让两个分支的每一次提交都按照提交时间(并不是push时间)排序,并且会将两个分支的最新一次commit点进行合并成一个新的commit,最终的分支树呈现非整条线性直线的形式
6、”正规而正统”的方式来回退代码,rebase + revert
具体操作,可以参考文章:https://zhenbianshu.github.io/2019/05/ways_to_rollback_git_code.html
文章https://www.jianshu.com/p/4a8f4af4e803详细描述了rebase的操作细节。