帶你搞懂git回滾程式碼(範例詳解)

2022-02-15 19:00:32
本篇文章給大家帶來了關於回滾程式碼的相關知識,Git是一個開源的分散式版本控制系統,可以有效、高速地處理從很小到非常大的專案版本管理,希望對大家有幫助。

在日常coding的過程中免不了分支之間的合併,回滾、提交、打tag等操作,如果你現在還不知道怎麼使用git工具回滾程式碼,或者總是擔心出錯沒有把握怕把程式碼搞丟,這很危險畢竟程式碼搞丟是很大的事情小則扣績效重則多扣點,但是 dont worry,你很幸運能看到這篇文章,當你看完以後就不會在有程式碼丟失的情況,因為我會帶你手把手建分支模擬回滾的常見情況

介紹

Git(讀音為/gɪt/)是一個開源的分散式版本控制系統,可以有效、高速地處理從很小到非常大的專案版本管理。

前言

在日常的程式碼回滾中常用的有兩種方式git revertgit reset來進行回滾,這兩種分別對應的不同的情況我儘量簡單明瞭的介紹這兩個命令都能做些什麼,接下來我會從個人倉庫新拉個分支從0開始,建兩個分支,分別是主分支master和開發分支develop來進行模擬

reset介紹

1、reset的作用是當你希望提交的commit從歷史記錄中完全消失就可以用

2、比如你在master分支提交了A-->B-->C提交了三個記錄,這個時候如果C記錄有問題你想回滾到B就可以用git reset進行

3、這個命令大概率的情況都是用在我們主分支的,因為我們上線的分支一般是master分支然後從develop進行功能開發

4、開發完成之後將分支合併到master,如果在上線之前發現合併的分支用問題可以將develop合併過來的分支進行回滾

5、說白了就是取消develop的本次合併

6、但是有一種情況就是共同作業開發的時候大家都合併到master之後就不能用reset強行回滾commit因為這樣會把其他人的提交記錄給沖掉,這時候就可以用revert來進行操作我們在下面說

製造一個分支模擬環境

1.從你自己的git倉庫建立一個新專案之後拉到本地

2.建立一個index.js隨便寫點東西,之後提交到倉庫

892bcd38cb0be56928896aba6901a0bb.png

3.我們在終端使用git log檢視commit可以看到目前只有一個剛才提交的commit

68f7620aacb6a05261a63763ab03fff9.png

4.我們從master分支遷出一個develop分支git branch develop,並且切換到該分支 git checkout develop

5.在develop分支新增一段程式碼,這個時候develop的commit記錄就新增了一條B的記錄

8452ee398247562d096b1fce52f73b05.png

6.在develop分支接著新增一段程式碼

8db886b3e6324616d6df3288affc3d7e.png

7.看下develop分支和master分支最新的commit記錄對比,可以看到dev分支領先master分支兩個commit

65ce32a8faf80cfb05b8c491b4bede20.pnga3493d3516ff7afad13053680c2c29f1.png

注意這裡有個問題當你進行分支合併的時候,有時候會發現雖然程式碼不一樣但是在進行分支合併的時候就提示程式碼沒有更新,就是因為當前的開發分支的commit記錄是落後於要合併的目標分支的,造成這種情況的原因就是reset濫用造成的,所以reset一定要慎用

操作一下reset來感受一下

1.我們將develop分支的程式碼合併到master,切換到master分支 執行git merge develop

2.我們在master分支使用git log檢視commit記錄找到B記錄,準備回滾這一條,回滾的時候不需要輸入全部的commid一般是前7位就夠用

5160a2005420978bcac99ed9e3c4ee3d.png

3.重點來了我們使用git reset 69fde2c進行回滾,這個時候檢視log記錄發現最後一條新增c記錄沒有了,這裡還有個問題如果直接使用git push推播會有以下提示。

a41b46c6640f7c1236800c2b9935d084.png

這是因為原生的記錄因為我們的回滾已經落後於倉庫的程式碼了,這個使用需要使用git push \-f進行強制提交

4.這個時候master分支就剩下A和B的commit記錄了,到這裡就是一次完整的reset回滾記錄,之後我們還是可以繼續正常把develop分支合併到master的

129c0e052f9c49ece401198aaa4105df.png

revert介紹

1、revert的原理是,在當前提交後面,新增一次提交,抵消掉上一次提交導致的所有變化。它不會改變過去的歷史,所以是首選方式,沒有任何丟失程式碼的風險

2、revert可以抵消上一個提交,那麼如果想要抵消多個需要執行 git revert 倒數第一個commit id 倒數第二個commit

3、這個就常用於當你提交了一次commit之後發現提交的可能有問題就可以用到revert

4、還有一種情景是已經有很多人提交過程式碼,但是想改之前的某一次commit記錄又不想影響後面的也可以使用revert,他會把你後面提交的記錄都放到工作區只是合併的時候需要注意一點

我們來模擬一下環境

1.切到develop分支現在該分支有三個commit記錄e949e27c1037b6fbad3b656c22c0c295.png

2.我們使用rever進行回滾試一下git revert 16083ce,如果你也用的是vs code可以看到工作區的變化,並且在控制檯可以提交預設的commit

769984e8b268de9e7d810e78f1879e1c.png

3.看一下log記錄,可以看到新增了一個記錄Revert 新增C,並且原來的新增C還是在的

4a1daf6769ae6e16423d7732f441be78.png

commit記錄打tag

1、在上線之前我們需要對當前的commit記錄打一個tag方便上線的程式碼有問題可以及時回滾

我們來介紹一下常用的幾個命令

1.git tag列出所有的tag列表

b263aaee2a0a6528d4ff55ede1e4f75a.png

2.建立一個tag,使用git tag [name],我們新增一個 git tag 測試4,在使用git tag 檢視一下

4b1e4e2b5ccbc34d361435339def8a2c.png

3.檢視tag對應的commit資訊,git show [tag名字],舉個例子git show 測試1,上線之後如果有問題我們就可以根據 下圖的commit id進行程式碼回滾

fa92f17d2de3ef9d534d45ff077b7754.png

結束

git管理工具在我們日常中可以說是天天都在用,所以對於常見的問題場景對應的方法一定要牢牢地掌握免得遇到的時候顯得捉襟見肘

推薦學習:《》

以上就是帶你搞懂git回滾程式碼(範例詳解)的詳細內容,更多請關注TW511.COM其它相關文章!