git reflog
命令是用來(lái)恢復(fù)本地錯(cuò)誤操作很重要的一個(gè)命令窖铡,所以在這里對(duì)它進(jìn)行一下整理疗锐。
1、git reflog
命令說(shuō)明
reflog
翻譯:Reference logs
(參考日志)
git reflog
命令:可以叫做顯示可引用的歷史版本記錄费彼。
可引用歷史提交版本滑臊,什么意思?
-
使用
git log
命令只可以查看到HEAD指針及其之前的版本信息箍铲,如果版本發(fā)生過(guò)回退操作雇卷,則可能會(huì)出現(xiàn),HEAD指針之后仍存在歷史提交版本的情況,而這些提交版本信息通過(guò)git log
命令是看不到的关划。即:
git log
命令是顯示當(dāng)前的HEAD
和它的祖先小染,遞歸是沿著當(dāng)前指針的父親,父親的父親贮折,……裤翩,這樣的原則。 我們可以通過(guò)使用
git reflog
命令调榄,就可查看到所有歷史版本信息踊赠。由于查看所有歷史版本信息的目的,大多是為了進(jìn)行版本回退或恢復(fù)操作所使用每庆,從中找到所需的commit索引筐带,所以該命令被命名為reflog
,即:引用日志缤灵。
git log
命令與git reflog
命令作用范圍示意圖:
提示:
reflog
并不是Git倉(cāng)庫(kù)的一部分伦籍,它單獨(dú)存儲(chǔ),它純屬是本地的腮出。 (git reflog
命令顯示的內(nèi)容鸽斟,應(yīng)該是存儲(chǔ)在.git/logs/HEAD
文件中,或者是.git/logs/refs
目錄中的文件利诺。)也就是說(shuō)
git reflog
命令中保留了從clone倉(cāng)庫(kù)開(kāi)始,用戶所有在本地庫(kù)中的操作剩燥。
2慢逾、git reflog
命令顯示內(nèi)容
# 1.查看版本庫(kù)中歷史提交記錄
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
命令追加提交時(shí)毫缆,覆蓋了一條提交記錄)
說(shuō)明:
最前面是歷史提交commit-id的前7位唯竹,根據(jù)這7位可以將版本庫(kù)恢復(fù)到對(duì)應(yīng)節(jié)點(diǎn)狀態(tài)。
HEAD@{n}
:表示HEAD更改歷史記錄苦丁,最新的更改在上面浸颓。HEAD@{2}
:表示HEAD
指針在兩次移動(dòng)之前的情況。master@{one.week.ago}
:表示master
分支在本地倉(cāng)庫(kù)一周之前的情況。-
通過(guò)
HEAD@{n}
語(yǔ)法可以回退到指定的提交产上。例如:
git reset --hard HEAD@{3}
棵磷。 與
HEAD@{n}
與HEAD~n
功能類似,但是HEAD~n
回退的是git log
命令顯示的歷史提交記錄晋涣,而HEAD@{n}
回退的是git reflog
命令顯示的歷史提交記錄仪媒。最后一個(gè)冒號(hào)后面的字串為,該提交的說(shuō)明信息摘要姻僧。
3规丽、具體的用法
git reflog
命令具體用法如下:
-
git reflog [show] [log-options] [<ref>]
:就是顯示同可引用的歷史版本,同git reflog
撇贺。就在后邊可以加日志的選項(xiàng)赌莺。 -
git reflog expire [--expire=<time>] [--expire-unreachable=<time>] [--rewrite] [--updateref] [--stale-fix] [--dry-run | -n] [--verbose] [--all | <refs>…]
:刪除掉更老的reflog
條目。 -
git reflog delete [--rewrite] [--updateref] [--dry-run | -n] [--verbose] ref@{specifier}…
:從reflog
中刪除一個(gè)條目松嘶。 -
git reflog exists <ref>
:檢查一個(gè)ref是否有一個(gè)reflog條目艘狭。
4、引起ref變化的操作有
所有引起HEAD指針變動(dòng)的操作翠订,都會(huì)被記錄在git reflog
命令中巢音。
我們可知,引起HEAD指針變化的操作有:
-
git checkout branchName
:切換分支 尽超。 -
git commit
:提交官撼。 -
git reset commit
:重置。 -
git checkout commit
:簽出某一個(gè)提交似谁。 -
git merge
:合并操作傲绣。 -
git rebase
:基變。 -
git pull
:相當(dāng)于 fetch + merge 巩踏。 -
git pull : Fast-forward
:沒(méi)有沖突秃诵,快速前進(jìn)。 -
git pull --rebase
:相當(dāng)于fetch + rebase塞琼。 -
git clone
:初始化ref 菠净。
參考: