【學了就忘】Git後悔藥 — 31.reset版本回退說明

1、什麼版本回退

版本回退也可以叫回滾

若修改過的文件,不僅添加到了暫存區,還提交到了本地版本庫,還能撤銷嗎?
已經無法撤銷修改了,但是可以回退到修改前的版本。

版本回退也是撤銷操作的一種,但我更願意和前兩種撤銷操作分開理解。

引用廖雪峯比喻:

你不斷對文件進行修改,然後不斷提交修改到版本庫裏,就好比玩RPG遊戲時,每通過一關就會自動把遊戲狀態存盤,如果某一關沒過去,你還可以選擇讀取前一關的狀態。有些時候,在打Boss之前,你會手動存盤,以便萬一打Boss失敗了,可以從最近的地方重新開始。

Git也是一樣,每當你覺得文件修改到一定程度的時候,就可以“保存一個快照”,這個快照在Git中被稱爲commit。一旦你把文件改亂了,或者誤刪了文件,還可以從最近的一個commit恢復,然後繼續工作,而不是把幾個月的工作成果全部丟失。

2、需要了解兩個知識點

能夠了解是什麼即可。

(1)HEAD是什麼

HEAD也可以稱爲HEAD指針。

Git倉庫初始化之後,會默認創建一個master分支,即主分支。這是Git對版本進行管理的時間線,即Git的每次提交,都會自動把它們串成一條時間線,這條時間線就是一個分支。

如果沒有新建分支,那麼就只有一條時間線,即只有一個分支,master分支(主分支)。在這條master時間線上有很多版本的時間節點(提交commit),而HEAD指針則指向的是當前分支上,剛剛提交的版本時間節點。

如果上面看不太懂的話,就記住:HEAD指針指向分支,分支指向具體commit。所以HEAD指針代表的就是當前工作分支上最新一次的提交。

(具體原理以後會總結,這裏不詳細展開)

(2)HEAD指針用法

上面說了,HEAD指針代表的就是當前工作分支上最新一次的提交。換句話說HEAD這個詞就等同於當前工作分支上最新一次提交的別名。

HEAD指針可以表示相對位置,有幾種表示方法:

  • 單寫HEAD,表示當前工作分支的最新提交版本。
  • 可以通過^表示前一個版本,例如HEAD^,如要表示前兩個版本,則需要加兩個^,示例:HEAD^^,以此類推。
  • 但是要選擇之前版本跨度較多的時候,^的數量就不是很好數了(書寫可讀性差),此時可以使用~加數字表示當前版本之前的第幾個版本。例如:HEAD~100表示爲最新版本的往前第100個版本。
  • 當時我們也可以使用HEAD@{0}的方式進行表示,HEAD@{0}等於HEADHEAD@{1}等於HEAD^,也就是前一個版本。值的數字越小,表示版本越新,數字越大表示版本越舊。

HEAD指針的作用示意圖:


3、git reflog命令介紹

git reflog命令是用來恢復本地錯誤操作很重要的一個命令,他和git log命令一樣都可以查看本地版本庫的歷史提交信息。

但是不同的是,git reflog命令能夠查看可引用歷史提交版本。

可引用歷史提交版本,什麼意思?

  • 使用git log命令只可以查看到HEAD指針及其之前的版本信息,如果版本發生過回退操作,則可能會出現,HEAD指針之後仍存在歷史提交版本的情況,而這些提交版本信息通過git log命令是看不到的。
  • 我們可以通過使用git reflog命令,就可查看到所有歷史版本信息。由於查看所有歷史版本信息的目的,大多是爲了進行版本回退或恢復操作所使用,從中找到所需的commit索引,所以該命令被命名爲reflog,即:引用日誌。

git log命令與git reflog命令作用範圍示意圖:

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