【學(xué)了就忘】Git操作 — 51.git reflog命令

git reflog 命令是用來恢復(fù)本地錯誤操作很重要的一個命令,所以在這里對它進行一下整理。

1、git reflog命令說明

reflog翻譯:Reference logs(參考日志)

git reflog命令:可以叫做顯示可引用的歷史版本記錄。

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

  • 使用git log命令只可以查看到HEAD指針及其之前的版本信息,如果版本發(fā)生過回退操作,則可能會出現(xiàn),HEAD指針之后仍存在歷史提交版本的情況,而這些提交版本信息通過git log命令是看不到的。

    即:git log命令是顯示當前的HEAD和它的祖先,遞歸是沿著當前指針的父親,父親的父親,……,這樣的原則。

  • 我們可以通過使用git reflog命令,就可查看到所有歷史版本信息。由于查看所有歷史版本信息的目的,大多是為了進行版本回退或恢復(fù)操作所使用,從中找到所需的commit索引,所以該命令被命名為reflog,即:引用日志。

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

提示:reflog并不是Git倉庫的一部分,它單獨存儲,它純屬是本地的。 (git reflog命令顯示的內(nèi)容,應(yīng)該是存儲在.git/logs/HEAD文件中,或者是.git/logs/refs目錄中的文件。)

也就是說git reflog命令中保留了從clone倉庫開始,用戶所有在本地庫中的操作。

2、git reflog命令顯示內(nèi)容

# 1.查看版本庫中歷史提交記錄
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/amend_test (master)
$ git log --oneline
68d777d (HEAD -> master) 我是第3次提交,重新修改的message
8b3a071 第2次提交,新增內(nèi)容:git commit --amend v2
d3e2d8c 第1次提交,新增readme.txt文件

# 2.查看可引用的歷史提交記錄
69a9841 HEAD@{0}: commit (amend): 我是第3次提交,重新修改的message
bd4fd48 HEAD@{1}: commit: 第3次提交,新增內(nèi)容:git commit --amend v3
8b3a071 HEAD@{2}: commit: 第2次提交,新增內(nèi)容:git commit --amend v2
d3e2d8c HEAD@{3}: commit (initial): 第1次提交,新增readme.txt文件

從上可以看到,執(zhí)行git reflog 命令,比執(zhí)行git log命令多顯示了一條內(nèi)容。

(是使用git commit --amend命令追加提交時,覆蓋了一條提交記錄)

說明:

  1. 最前面是歷史提交commit-id的前7位,根據(jù)這7位可以將版本庫恢復(fù)到對應(yīng)節(jié)點狀態(tài)。

  2. HEAD@{n}:表示HEAD更改歷史記錄,最新的更改在上面。

  3. HEAD@{2}:表示HEAD指針在兩次移動之前的情況。

  4. master@{one.week.ago}:表示master分支在本地倉庫一周之前的情況。

  5. 通過HEAD@{n}語法可以回退到指定的提交。

    例如:git reset --hard HEAD@{3}。

  6. HEAD@{n}HEAD~n功能類似,但是HEAD~n回退的是git log命令顯示的歷史提交記錄,而HEAD@{n}回退的是git reflog命令顯示的歷史提交記錄。

  7. 最后一個冒號后面的字串為,該提交的說明信息摘要。

3、具體的用法

git reflog命令具體用法如下:

  1. git reflog [show] [log-options] [<ref>]:就是顯示同可引用的歷史版本,同git reflog。就在后邊可以加日志的選項。
  2. git reflog expire [--expire=<time>] [--expire-unreachable=<time>] [--rewrite] [--updateref] [--stale-fix] [--dry-run | -n] [--verbose] [--all | <refs>…]:刪除掉更老的reflog條目。
  3. git reflog delete [--rewrite] [--updateref] [--dry-run | -n] [--verbose] ref@{specifier}…:從reflog中刪除一個條目。
  4. git reflog exists <ref>:檢查一個ref是否有一個reflog條目。

4、引起ref變化的操作有

所有引起HEAD指針變動的操作,都會被記錄在git reflog命令中。

我們可知,引起HEAD指針變化的操作有:

  • git checkout branchName:切換分支 。
  • git commit:提交。
  • git reset commit:重置。
  • git checkout commit:簽出某一個提交。
  • git merge:合并操作。
  • git rebase:基變。
  • git pull:相當于 fetch + merge 。
  • git pull : Fast-forward:沒有沖突,快速前進。
  • git pull --rebase:相當于fetch + rebase。
  • git clone:初始化ref 。

參考:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容