一汛聚、背景
寫代碼總不可能一帆風(fēng)順,一直向前迭代短荐。有時(shí)候倚舀,我們需要進(jìn)行回滾到之前的版本。
本文主要介紹git命令如何進(jìn)行代碼回滾忍宋。
二瞄桨、代碼回滾相關(guān)命令
三、git命令的實(shí)際操作演練
1讶踪、git log
~/Documents/tag-service$ git log
2芯侥、
~/Documents/tag-service$ git revert e22c03c65ddfe3df412151f26de19f53decec3e7
缺點(diǎn)是:當(dāng)提交代碼的次數(shù)多,如果需要回滾的次數(shù)多,你需要逐個執(zhí)行revert柱查。
3廓俭、git reset 命令,git log不再出現(xiàn)被回退代碼的痕跡唉工。
~/Documents/tag-service$ git log
-- 8ff4e88d84022f882e79799726eb8b9fb0bbb1a5 是“日志格式統(tǒng)一”的提交點(diǎn)研乒。
~/Documents/tag-service$ git reset --hard 8ff4e88d84022f882e79799726eb8b9fb0bbb1a5
~/Documents/tag-service$ git push --force origin master
強(qiáng)制重置到某個提交點(diǎn),這時(shí)候淋硝,你再使用git log 查看雹熬,是看不到被重置的提交點(diǎn)的!
但是git reflog可以:
~/Documents/tag-service$ git reflog
~/Documents/tag-service$ git reset --hard e22c03c
HEAD 現(xiàn)在位于 e22c03c 測試提交1
~/Documents/tag-service$ git push --force origin master
使用git log 可以看到重置成功谣膳!
4竿报、git rebase
操作實(shí)際上是將當(dāng)前執(zhí)行rebase分支的所有基于原分支提交點(diǎn)之后的commit打散成一個一個的patch,并重新生成一個新的commit hash值继谚,再次基于原分支目前最新的commit點(diǎn)上進(jìn)行提交烈菌,并不根據(jù)兩個分支上實(shí)際的每次提交的時(shí)間點(diǎn)排序,rebase完成后花履,切到基分支進(jìn)行合并另一個分支時(shí)也不會生成一個新的commit點(diǎn)芽世,可以保持整個分支樹的完美線性
5、git merge
操作合并分支會讓兩個分支的每一次提交都按照提交時(shí)間(并不是push時(shí)間)排序诡壁,并且會將兩個分支的最新一次commit點(diǎn)進(jìn)行合并成一個新的commit济瓢,最終的分支樹呈現(xiàn)非整條線性直線的形式
6、”正規(guī)而正統(tǒng)”的方式來回退代碼妹卿,rebase + revert
具體操作葬荷,可以參考文章:https://zhenbianshu.github.io/2019/05/ways_to_rollback_git_code.html
文章http://www.reibang.com/p/4a8f4af4e803詳細(xì)描述了rebase的操作細(xì)節(jié)。