git reflog 命令來查看歷史提交記錄

原文地址:https://blog.csdn.net/qq446282412/article/details/84061662

一、問題描述

昨天下午有個同事急急忙忙跑我座位上,要我幫忙,說他剛剛因爲手誤,將他本地的某個project的某個branch分支刪除了,並且也將Gitlab上面的遠程分支也刪除了。他本來是想發起merge request的,但是後面他眼神不好以爲已經merged過了,就直接刪了Gitlab上的遠程分支並且將他本地的這個分支也直接刪除了。

現在他跑過來問我有沒有辦法恢復,不然他這一天的工作就白費了。

看他急急忙忙不知所措的樣子,我直接調侃他說恢復不了。要他以後小心點刪除branch,不要眼神不好。後面才慢慢地然後使用了git reflog 查找了他所有的分支提交記錄等,然後找到對應的git commit的sha1碼,然後恢復過來了。他說居然還有這種操作,666!我去,這是常規操作好嗎?

二、復現問題

現在我準備找一個測試的demo git 工程來進行演練一下,如何恢復以及被刪除的分支。

1、創建一個git倉庫並且提交一個文件

在這裏插入圖片描述

2、再次編輯test.txt文件並且提交

在這裏插入圖片描述

3、切換分支並再次編輯test.txt文件並且提交

創建並切換到 feature/test1分支
在這裏插入圖片描述

在feature/test1分支上繼續編輯test.txt文件並且提交
在這裏插入圖片描述

現在我們有兩個分支了,一個 feature/test1分支,一個 master分支。 feature/test1分支比master分支多了一次提交記錄。

4、刪除刪除 feature/test1 分支

現在我們模擬剛纔那位同事之間刪除了 feature/test1 分支。我們先checkout到master分支,然後刪除 feature/test1 分支


feature/test1分支因爲沒有合併到master分支,就被刪除了。所以此時master分支沒有feature/test1分支上做的新的修改記錄。

三、恢復feature/test1分支

如何恢復feature/test1分支呢??

3.1 找到feature/test1分支的最後一次提交記錄

我們使用 git reflog 來看下git的提交記錄,可以發現 dab39f4這次提交記錄描述是 third commit 。

區別:如果在回退以後又想再次回到之前的版本,git reflog 可以查看所有分支的所有操作記錄(包括commit和reset的操作),包括已經被刪除的commit記錄,git log則不能察看已經刪除了的commit記錄

我們再來看看之前的截圖,在feature/test1分支第三次提交的值爲 dab39f4808f6553e57a0551f44044919a31dc76b


dab39f4 和 dab39f4808f6553e57a0551f44044919a31dc76b 不就是提交記錄的簡寫和完整的寫法,一模一樣。

因此我們找到了這次提交的SHA1校驗和,因此我們就可以恢復feature/test1分支了。

3.2 根據feature/test1分支的最後一次提交記錄來恢復feature/test1分支

我們可以看到,我們恢復了 feature/test1分支,並且feature/test1分支之前的提交記錄都完整的還原回來了,和原來一樣,比master分支多了一次提交記錄。如下所示:
在這裏插入圖片描述

四、git reflog 簡介

4.1 查看歷史版本記錄

命令:git reflog
作用:查看提交版本歷史記錄
執行命令後如圖:
在這裏插入圖片描述

從圖中可以看到,執行git reflog 命令後,顯示出來了很多行記錄。

每行記錄都由版本號(commit id SHA),HEAD值和操作描述三部分組成。版本號在第一列,HEAD值在第二列,操作描述信息在第三列。

版本號
在之前都有提到,標識着每一次提交、合併等操作時的版本,相當於唯一標識
HEAD值
同樣用來標識版本,但是不同於版本號的是,Head值是相對的。
當HEAD值爲HEAD時,表示爲提交的最新版本;HEAD^ 表示爲最新版本的上一個版本;HEAD^^表示爲最新版本的上上個版本;HEAD~100表示爲最新版本的往上第100個版本。
HEAD值越小,表示版本越新,越大表示版本生成時間越久。

在上面圖中,我們發現HEAD值的展示形式爲HEAD@{0}、HEAD@{1}、HEAD@{2}…同樣HEAD值的數字越小,表示版本越新,數字越大表示版本越舊。

操作描述
記錄了本次是哪種操作,以及操作時編寫的描述信息。


4.2 查看歷史版本記錄–指定顯示條數

同時,與git log相同的是,git reflog也提供了控制顯示條數的選項:
命令:git reflog -n
執行命令後如圖:

在這裏插入圖片描述

如圖所示,這裏設置顯示條數爲3條,執行命令後,顯示的條數爲指定的條數3條。

在這裏插入圖片描述

 

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