git revert詳情使用

1. 背景

描述一個git revert使用場景,加深一下對git revert的使用,場景如下:

  • Step 1:小輝在分支dev1上開發,提交了4次(分別爲c1、c2、c3、c4),發佈時需要把dev1分支合併到master分支上,生成了提交記錄m5,併發布到線上。
  • Step 2: 小王在分支dev2上開發,提交了1次(c3),然後也把dev2分支合併到master分支上,生成了提交記錄m6,併發布到線上。
  • Step 3: 不幸的是,小輝的dev1分支上存在bug,需要回滾dev1上的所有提交。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-FjE81opV-1586452158369)(pic/git_revert_1.png)]

2. 解決思路

2.1 從簡單場景說起

假設在上面的場景中沒有小王dev2的提交,即把上面的場景簡單化(如下圖),流程如下:

  • Step 1:小輝在分支dev1上開發,提交了4次(分別爲c1、c2、c3、c4),發佈時需要把dev1分支合併到master分支上,合併的時候採用的是禁止快進式合併,即執行命令git merge --no-ff dev1生成了提交記錄m5,併發布到線上。
  • Step 2: 不幸的是,小輝的dev1分支上存在bug,需要回滾dev1上的所有提交。

在這裏插入圖片描述

切到master分支上,使用git log --graph看出:

在這裏插入圖片描述

這裏可以採用命令 git revert -m 1 77cb206f6b5db591a43eb55899b84f161656694f,即保留master主分支(1代表保留master主分支,revert掉另外一個分支的提交),revert完成後再看log會生成一個revert提交m6,如下圖:
在這裏插入圖片描述
簡化圖如下:

在這裏插入圖片描述

上面進行了分支的成功回滾,但帶來一個問題,若小輝在dev1分支上修復完bug後在再提交生成了c5,此時再去合併到master分支,之前c1到c4次提交會消失,而只有c5的提交,此時應該怎麼辦?此時切到master分支,再對m6提交進行反向revert一次就會找到c1~c4次提交,此時再進行dev1合併就可以了,命令如下:

git checkout master
git revert 11e7d194b73f6276ad07ee56502e98b6dbfe357e  反向revert
git merge --no-ff dev1   合併dev1
git push origin master

圖如下:

在這裏插入圖片描述
在這裏插入圖片描述

2.2 回到上面複雜的場景

理解了簡單場景,複雜的場景只不過細心點就可以解決了,再看文中開頭提到的場景:

在這裏插入圖片描述

思路如下:

  • Step 1:revert掉m5提交,會生成m7提交,達到master分支去除dev1分支的所有修改。

在這裏插入圖片描述

  • Step 2:切到dev1分支上修改,進行bug修改,在dev1分支上生成c5。

在這裏插入圖片描述

  • Step 3:切到master分支上,對m7進行反向revert生成m8提交,再合併dev1分支,即可達到修復dev1分支上bug的問題。

在這裏插入圖片描述

上面的整體實戰示例如下圖(圖中爲了簡便,只進行了dev分支c1和c2提交):

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章