Git倉庫的提交記錄亂成一團,怎麼辦?

TechFlow2019發表於2020-11-17

大家好,今天和大家聊聊git當中一個非常好用的功能——區間選擇,它可以幫我們處理看起來非常複雜的提交記錄。從而幫助我們很快找到我們需要的內容。

如果大家有參與過多人協同的專案開發,比如十幾個人甚至更多的成員的時候,會發現一些分支的記錄非常的混亂,比如master。因為其中包含了太多的提交資訊,比如各種分支的merge記錄,以及線上bugfix等。這個時候使用區間選擇就非常有必要,它會幫助我們過濾掉不需要的提交記錄,快速找到我們想要的結果。

區間選擇

關於區間選擇我們之前在介紹rebase的時候曾經提到過一次:

git rebase --onto master feature bugFix

當我們執行這條命令之後,git會將在bugFix分支當中但是不在feature分支裡的內容rebase到master分支。這其實就是一種區間選擇,我們把兩個分支之間的差集選擇了出來。當然這是在rebase當中的應用,那麼我們能不能把這種形式應用在日誌搜尋上呢?

當然是可以的,最常用指明區間的語法是雙點。它的用法是兩個英文句號,它可以讓git選出在一個分支但是不在另外一個分支當中的提交,比如:

git log master..experiment

這個語句的含義就是篩選出在experiment當中但是不在master當中的提交。我們來看一張圖,會更加地直觀:

我們執行上面的命令之後,得到的結果就是C和D這兩個節點的提交記錄。

如果我們想要反其道而行之,想要獲得在master,但是不在experiment,也就是檢視我們在開發experiment這個分支的過程當中master進行了哪些改動,我們可以將前後兩個分支名交換順序。

git log experiment..master

這樣我們得到的結果是E、F兩個節點。

另外一個使用場景是在我們進行push之前進行檢查,檢視我們究竟做了哪些改動,哪些commit會被更新到遠端。這個時候我們比較的是當前節點以及遠端push的分支之間的差別,我們可以這樣:

git log origin/master..HEAD

對於這個功能Git進行了優化, 我們可以省去最後的HEAD,git會預設使用HEAD代替留空的情況。

三點及多點

除了上面使用的雙點語法之外,git當中還提供了三點以及多點的語法,我們先來說說三點的語法。

三點

其實三點的功能本質上和雙點是一樣的,可以認為是在雙點的基礎上做了一點優化,讓我們使用起來更加方便。在真實的使用場景當中,我們往往既需要知道我們正在開發的feature帶來的提交,也需要知道master後來進行的改動。這樣的話,我們會需要執行git log兩次,所以git提供了三點的語法,將兩次執行壓縮成了一次,通過使用三點語法,我們可以只需要執行一次就可以獲得的結果。

git log master...experiment

當我們執行這個命令之後,git會展示這兩個分支各自獨有的提交,以上圖舉例,它的執行結果應該是C、D、E、F這四個節點。

但是這有一個問題,我們光看其實是不知道這四個節點分別屬於哪個分支的,我們可以加上引數,--left-right,它會用箭頭表明這些提交分別被哪個分支獨有。

git log --left-right master...experiment
< F 
< E
> D
> C

多點

有的時候我們的提交情況可能會比較複雜,可能有多個分支糅雜在一起,你可能未必確定某一個改動的源頭。這個時候我們可能需要一個複雜的表示式才能把我們想要檢視的提交記錄表達清楚。

比如說我們現在有A、B、C三個分支,我們想要檢視在A或和B當中,但是不在C當中的提交。我們可以這樣寫:

git log A B ^C
git log A B --not C

上面的兩條語句都是可以的,第一條我們用^表示了not的意思,第二條比較直觀,我們直接加上字首來表示。這就是多點的用法,它支援我們定義多個來源,這樣一些複雜的情況就會非常方便。git預設多個來源之間是或的關係,這也是非常符合實際的。大家可以思考一下這個問題。

多點同樣也相容雙點的情況,雙點操作有一個問題是我們經常會搞混比較的主體,這個時候我們完全可以使用多點的語法來代替。

git log A ^B
git log A --not B

掌握了多點和雙點之後,我們就可以應付各種複雜場景下的log排查了,再加上之前介紹過的git show等功能,對於提升我們搜尋git log的速度非常有幫助。這麼幾個命令掌握下來,使用起來的氣質就不一樣,會給你一種自己已經是技術大牛的感覺。

今天的文章就到這裡,希望大家都能有這種感覺。如果還喜歡本文的話,請來個三連支援吧!(點贊、關注、轉發

原文連結,求個關注

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

相關文章