本篇文章給大家?guī)砹岁P(guān)于Git回滾代碼的相關(guān)知識,Git是一個開源的分布式版本控制系統(tǒng),可以有效、高速地處理從很小到非常大的項目版本管理,希望對大家有幫助。
在日常coding的過程中免不了分支之間的合并,回滾、提交、打tag等操作,如果你現(xiàn)在還不知道怎么使用git工具回滾代碼,或者總是擔心出錯沒有把握怕把代碼搞丟,這很危險畢竟代碼搞丟是很大的事情小則扣績效重則多扣點,但是 dont worry,你很幸運能看到這篇文章,當你看完以后就不會在有代碼丟失的情況,因為我會帶你手把手建分支模擬回滾的常見情況
介紹
Git(讀音為/g?t/)是一個開源的分布式版本控制系統(tǒng),可以有效、高速地處理從很小到非常大的項目版本管理。
前言
在日常的代碼回滾中常用的有兩種方式git revert
和git reset
來進行回滾,這兩種分別對應(yīng)的不同的情況我盡量簡單明了的介紹這兩個命令都能做些什么,接下來我會從個人倉庫新拉個分支從0開始,建兩個分支,分別是主分支master
和開發(fā)分支develop
來進行模擬
reset介紹
1、reset
的作用是當你希望提交的commit
從歷史記錄中完全消失就可以用
2、比如你在master
分支提交了A-->B-->C
提交了三個記錄,這個時候如果C記錄有問題你想回滾到B就可以用git reset
進行
3、這個命令大概率的情況都是用在我們主分支的,因為我們上線的分支一般是master
分支然后從develop
進行功能開發(fā)
4、開發(fā)完成之后將分支合并到master
,如果在上線之前發(fā)現(xiàn)合并的分支用問題可以將develop
合并過來的分支進行回滾
5、說白了就是取消develop
的本次合并
6、但是有一種情況就是協(xié)作開發(fā)的時候大家都合并到master
之后就不能用reset
強行回滾commit
因為這樣會把其他人的提交記錄給沖掉,這時候就可以用revert
來進行操作我們在下面說
制造一個分支模擬環(huán)境
1.從你自己的git倉庫創(chuàng)建一個新項目之后拉到本地
2.創(chuàng)建一個index.js隨便寫點東西,之后提交到倉庫
3.我們在終端使用git log
查看commit可以看到目前只有一個剛才提交的commit
4.我們從master
分支遷出一個develop
分支git branch develop
,并且切換到該分支 git checkout develop
5.在develop
分支新增一段代碼,這個時候develop的commit記錄就新增了一條B的記錄
6.在develop分支接著新增一段代碼
7.看下develop分支和master分支最新的commit記錄對比,可以看到dev分支領(lǐng)先master分支兩個commit
注意這里有個問題當你進行分支合并的時候,有時候會發(fā)現(xiàn)雖然代碼不一樣但是在進行分支合并的時候就提示代碼沒有更新,就是因為當前的開發(fā)分支的commit記錄是落后于要合并的目標分支的,造成這種情況的原因就是reset濫用造成的,所以reset一定要慎用
操作一下reset來感受一下
1.我們將develop
分支的代碼合并到master
,切換到master
分支 執(zhí)行git merge develop
2.我們在master分支使用git log
查看commit記錄找到B記錄,準備回滾這一條,回滾的時候不需要輸入全部的commid一般是前7位就夠用
3.重點來了我們使用git reset 69fde2c
進行回滾,這個時候查看log記錄發(fā)現(xiàn)最后一條新增c
記錄沒有了,這里還有個問題如果直接使用git push
推送會有以下提示。
這是因為本地的記錄因為我們的回滾已經(jīng)落后于倉庫的代碼了,這個使用需要使用
git push -f
進行強制提交
4.這個時候master分支就剩下A和B的commit記錄了,到這里就是一次完整的reset回滾記錄,之后我們還是可以繼續(xù)正常把develop分支合并到master的
revert介紹
1、revert的原理是,在當前提交后面,新增一次提交,抵消掉上一次提交導致的所有變化。它不會改變過去的歷史,所以是首選方式,沒有任何丟失代碼的風險
2、revert可以抵消上一個提交,那么如果想要抵消多個需要執(zhí)行 git revert 倒數(shù)第一個commit id 倒數(shù)第二個commit
3、這個就常用于當你提交了一次commit之后發(fā)現(xiàn)提交的可能有問題就可以用到revert
4、還有一種情景是已經(jīng)有很多人提交過代碼,但是想改之前的某一次commit記錄又不想影響后面的也可以使用revert,他會把你后面提交的記錄都放到工作區(qū)只是合并的時候需要注意一點
我們來模擬一下環(huán)境
1.切到develop分支現(xiàn)在該分支有三個commit記錄
2.我們使用rever進行回滾試一下git revert 16083ce
,如果你也用的是vs code可以看到工作區(qū)的變化,并且在控制臺可以提交默認的commit
3.看一下log記錄,可以看到新增了一個記錄Revert 新增C
,并且原來的新增C
還是在的
commit記錄打tag
1、在上線之前我們需要對當前的commit記錄打一個tag方便上線的代碼有問題可以及時回滾
我們來介紹一下常用的幾個命令
1.git tag
列出所有的tag列表
2.創(chuàng)建一個tag,使用git tag [name]
,我們新增一個 git tag 測試4
,在使用git tag
查看一下
3.查看tag對應(yīng)的commit信息,git show [tag名字]
,舉個例子git show 測試1
,上線之后如果有問題我們就可以根據(jù) 下圖的commit id進行代碼回滾
結(jié)束
git管理工具在我們?nèi)粘V锌梢哉f是天天都在用,所以對于常見的問題場景對應(yīng)的方法一定要牢牢地掌握免得遇到的時候顯得捉襟見肘
推薦學習:《Git教程》