作為開發者,我們都需要使用git。無論是開源專案,還是企業專案,我們都需要回溯歷史變動。查詢某個功能是什麼時候新增的,我們想檢視它的演變就可以了(因為git就是按照時間軸標記commit的)。
如果從專案中,找到某個變數,但是想知道這個變數的所有commit資訊
這時我們就可以使用下面g**it log進行搜尋
git log -s '關鍵字'
這些commit是從最晚到最早提交進行排序的結果列表,這樣可以檢視最近的'關鍵字'變動
如果對git log 非常熟悉的,就不用往下看了。。我是想記錄一些自己的感想,認為對工作,對個人提公升有幫助的點。
git log --reverse -s '關鍵字'
比如我想檢視v-on在vue中的實現,第乙個想到的是使用編輯器或者grep/rg全域性搜尋。
因為vue專案基於git,我們有更好的方式(不用全域性搜尋),那就是把問題轉換為尋找第乙個含有'v-on'的commit記錄,然後從中探索它的實現過程
git log --reverse -s 'v-on'
效果圖:
可是這樣子還是不夠友好,因為並沒有列出包含'v-on'的記錄到底在檔案中**,僅僅列出了commit資訊
所以我們可以給 git log 新增 -p引數,讓記錄直接輸出到stdout,然後我們可以繼續新增grep進行關鍵字過濾結果
git log --reverse -p -s 'v-on' | grep -ie "(^commitb|^diffb|v-on)" -a 3 -b 3 -m 30
git log --reverse -p -s 'v-on' 《上一次最後輸出的commit hash>..《最新的commit hash或者分支名字》 | grep -ie "(^commitb|^diffb|v-on)" -a 3 -b 3 -m 30(-m 是限制匹配輸出30次,防止過多匹配)
如果有些檔案是在一行過長,可以用rg -m 限制一行的byte大小,這樣過長的一行就會被跳過
git log --reverse -p -s 'v-on' 《上一次最後輸出的commit hash>..《最新的commit hash或者分支名字》 | rg -e "(^commitb|^diffb|v-on)" -a 3 -b 3 -m 500
如果有大量的匹配,一時之間停不下來,-m限制匹配出現次數來終止。也可以執行commit的範圍來決定匹配,因為我們沒法知道關鍵字都集中在那乙個範圍,所以這樣會有點被動。
取head後的第20個commit hash如下:
git rev-list head..master | tail -20 | head -1
這樣把上面的結果,放到前面的《最新的commit hash或者分支名字》,就可以知道範圍查詢,避免停不下來。
一般來說,可以用git checkout head~1(head向後,也就是向下)
也可以用git checkout head^1 來控制跳到那個父commit(如果當前的commit,有多個合併**,它可以從多個父**方向選擇乙個進行回退)
讓head向前,也就是向上移動
git checkout -(類似cd -,返回上一次記錄)
git checkout $(git rev-list head..master | tail -1| head -1)(如果要指定向前多少步,修改 tail 的引數)
太幸運了,我們在第乙個commit,就看到vue作者寫的v-on正則,並且是|和@連線,所以@和v-on是同乙個匹配規則,就是這麼來的。
接下來我們就可以繼續翻閱v-on的相關**演進,這裡就不演示了
除了-s之外,使用-g引數讓git log支援正則
git log --reverse -g 'v-on'
// 檔案中,某段範圍的演變記錄回溯
git log -l 《開始行號》,《結束行號》:《檔案路徑》
// 按函式名追溯(有時候不使用,可能跟語法詞法有關需要合適的語言)
git log -l :《函式名》:《檔案路徑》
// 整個檔案記錄回溯
git log --follow 《檔案路徑》
這個我就不展示了,可以自己嘗試,結合grep或者rg獲取關鍵字的位置
使用 git reflog,可以檢視一些本地git的操作日誌
關鍵字查詢
題目描述 每次給你一篇文章,和一些關鍵字,需要你告訴我多少關鍵字將匹配於文章。輸入描述 第一行包含乙個整數,表示有多少篇文章。最後一行是文章,長度不超過1000000。輸出描述 輸出文章中包含多少關鍵字。輸入樣例 15 shehe sayshr heryasherhs 輸出樣例 3源 include...
this關鍵字使用
一,表示類中屬性 1,沒有使用this的情況 class person public string getinfo public class thisdemo01 執行結果 姓名 null,年齡 0 可以得出結論 此時並沒有正確將內容賦給屬性 假設身邊有乙隻筆,遠處也有乙隻筆,肯定會就近拿身邊的筆。...
AngularJS關鍵字查詢
按貨物數量反序排序 按貨物入庫時間正序排序 按貨物入庫時間反序排序 入庫貨物名稱 貨物數量 貨物產地 貨物單價 貨物入庫時間日期操作 刪除mo.controller myctrl function scope 刪除 scope.del function delname else 定義下拉列表的排序 ...