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


今天我們來介紹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...)}}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM