操作失誤不要慌,這個命令給你的Git一次反悔的機會

TechFlow2019發表於2020-11-12

今天我們來介紹git當中兩個非常非常好用的工具,git show和reflog。

這兩個命令雖然不是必知必會,但是如果熟練使用可以極大地幫助我們檢視程式碼倉庫的問題,以及在我們操作失誤的時候拯救我們。可以理解成應急技能,一般情況下用不到,關鍵時候會的話可以救命的那種。

git show

首先來聊聊git show,它解決了我們日常開發場景當中非常常見的一個問題,就是回看某一個提交的內容。我們通過git log只能閱讀到commit的時候輸入的提示語。但有些開發者不遵守規範,或者是提示語寫得非常簡略,我們很難get到其中的內容,還是得需要手動checkout過去檢視內容,這就非常的不方便。

而有了git show工具之後,我們可以直接通過git show命令檢視到程式碼層面的改動

git show接收一個引數,表示具體的commit id,比如:

git show 40a91193d

那麼git會自動展示出這個commit下所有的改動內容:

這個大家都很好理解,但是有一個小問題,就是我們怎麼知道我們要看的提交的id呢?所以我們需要先查到commit id,才能git show,否則盲目亂show一通也很花時間。

查詢commit id,我們之前介紹過,這裡再簡單提一下。一般來說有兩種引數非常好用,第一種是--stat引數,它可以列舉出每一個commit具體到檔案級別的改動:

第二個引數是pretty=oneline,它可以將git的提交記錄壓縮成一行,方便我們快速查詢提交時的備註。

我們之前介紹過,在git實現的內部,分支其實只是一個指向節點的指標。所以我們也可以用git show + 分支名的方法來檢視某一個分支的改動,這樣查詢出來的改動是這個分支最後一個提交節點的。

比如:

git show test

展示的就是test這個分支最後一個提交的改動,如果我們想要檢視test分支倒數第二個節點的改動呢?這就需要我們使用祖先引用了。我們之前也介紹過,我們有兩種方法可以表示一個節點的祖先。第一種方法是使用^這個符號,它表示某個節點的父節點。這個符號是可以重複引用的,比如我們要選擇倒數第三個節點,就可以寫成test^^。

第二種方法就是使用~,它和^的意思是一樣,一樣表示父節點,但是它可以後面跟一個數字表示巢狀。舉個例子,比如test^^它等價於test~2。

所以比如我們想要檢視test分支倒數第三個節點的提交,我們只需要這樣就可以了:

git show test~3

git reflog

今天我們要介紹的第二個功能叫做reflog,這是一個非常非常有用的功能,很多次救了我的命。

reflog是reference log的縮寫,含義是引用日誌,它會記錄下HEAD節點和分支引用所指向的歷史。我們可以使用git reflog命令來檢視引用日誌:

簡單解釋一下這個展示出來的日誌,它最左側一列表示commit id。它的第二列表示的是分支,也就是這個提交屬於哪一個分支。第三列表示的是相對位置,也就是它相對於現在HEAD指標的位置。最後一列是資訊,它記錄的是HEAD指標移動的情況

當我們使用reset或者是checkout等命令的時候,都會在這裡留下記錄。當我們想要反悔了,我們可以通過reflog迅速找到正確的位置。

這個經常出現,比如我們checkout到了一個過去的節點檢視了一些程式碼,或者是使用了reset了過去的節點。當你檢視完了想要回去的時候,你會發現你回不去了。使用git log只會展示再之前的日誌,因為git log是以HEAD節點往前輸出的。所以這個時候我們就只能檢視reflog,找到我們checkout過來的commit id,然後再通過checkout將HEAD指標移動過去。

也就是說reflog給了你一次後悔的機會,這也是我們之前說的,只要是提交過的程式碼,一般情況下都不會丟失,因為我們還可以通過reflog進行查詢。

今天的文章就到這裡,怎麼樣,你學會了嗎?如果還喜歡今天的內容的話,請來一個三連支援吧~(點贊、關注、轉發

原文連結,求個關注

本文使用 mdnice 排版

{{uploading-image-815671.png(uploading...)}}

相關文章