實例講解git revert命令原理及使用

我們在使用git時,經常用到版本回退的功能。git中提供了兩個命令一個是reset,另一個是revert。其中reset命令比較好理解,直接git reset 版本哈希編碼即可恢復到指定的版本號,因為這種操作無法再回復撤消版本號後面的版本(比如 我們軟件經過了a->b->c,如果我們reset 到b的話,就再也無法找到c這個版本了)而且日誌也同時恢復到了版本2,因此在實際工作中通常不建議使用reset。

revert命令是撤消提交(原理就是複製要撤消版本前的那一個版本來做為新的提交),這種操作非常巧秒的保留了每一個版本,因此這個在版本撤消中一直使用。

下面我們實例說明revert的實現原理和效果:

比如我們有以下版本流程:

實例講解git revert命令原理及使用

上圖中的幾個箭頭說明:

HEAD旁邊的箭頭是指當前HEAD指針指向4這個版本。

4左邊的箭頭是代表4這個版本的父版本是3,以此類推3的父版本是2,2的父版本是1。

之所以這樣,這是git的底層邏輯決定的。因為git每執行一次commit,相當於提交了個commit tree,除了第一次commit tree的父引用為空外,以後每一次commit都會記錄著上一次commit tree的指針地址。也正因為此,我們的git流程才可以方便的執行reset或revert指令。

我們這裡做一下測試來學習revert的工作原理:

本例我們先創建一個空的倉庫,然後創建一個a.txt文檔,分別進行如下操作增加行1內容:111

git add a.txt

git commit -m "1"

增加行2內容:222

git add a.txt

git commit -m "2"

增加行3內容:333

git add a.txt

git commit -m "3"

增加行4內容:444

git add a.txt

git commit -m "4"

以上就是我們進行了4次提交,分別是"1","2","3","4",所以當前HEAD 指向"4"這個提交。

實例講解git revert命令原理及使用

我們這時查看git 日誌的效果如下:

實例講解git revert命令原理及使用

假設我們現在想要退回到版本2,那麼我們需要兩步:

1、使用git revert 6fec45 命令使版本退回到版本3(這個你也可以理解為撤消6fec45這個commit)

運行這個命令後,a.txt內容為:

實例講解git revert命令原理及使用

查看git 日誌如下:

實例講解git revert命令原理及使用

2、使用git revert 3ee3df 命令使版本退回到版本2(也可以理解為撤消3ee3df這個commit)

本步驟說明如下:

因第1步我們達到的效果就是複製一個新的版本,其狀態就是版本"3"的那次提交。因此我們可以再進行git revert 3ee3df命令,這樣同步驟1一個道理,執行後,我們就得到了"2"的複製版本。即狀態達到了"2"這個版本。

這時我們查看a.txt文件內容,正如我們所料,內容如下圖所示:

實例講解git revert命令原理及使用

我們查看git日誌,可以看到,同樣執行revert 3ee3df後,其實是新增加了一個commit。

實例講解git revert命令原理及使用

總結一下,那麼到下面,我們的版本流程應該是這樣:

實例講解git revert命令原理及使用

如果這次我們想退回到版本4 ,那應該怎麼做呢?很簡單,只需要先revert 6那個提交,然後再revert 5那個提交即可。

實例講解git revert命令原理及使用

實例講解git revert命令原理及使用


分享到:


相關文章: