前些月,寫了一個關於 git 的表格,叫Git Cheat Sheet,現分享一些有用的小技巧,更多內容請移步,另有一個很是不錯的關於 git 小技巧的項目 git-tips。前端
誰動了個人代碼?node
誰的 bug 指到了個人頭上?git
團隊合做時,常常會出現這樣的問題。這時候可使用 git blame <file>
來定位代碼的最後一次修改。可是,有一個問題,這並不能看出本行代碼之前的修改。好比項目組中某人對所有代碼進行了格式化,git blame
就失去了做用。此時,能夠與另外一個有用的命令 git log -p <file>
結合使用,能夠查看文件的更改歷史與明細,最終找到這個鍋究竟應該由誰來背。github
git blame -L 10,12 package.json
git log -p -L 10,12:package.json
複製代碼
當你常常工做於 A 與 B 兩個分支,須要來回切。這時命令應該是 git checkout A
,但這裏有一個更簡單的命令,git checkout -
,表示切到最近的一次分支。若是你須要把 B 分支的內容合併過來,可使用 git merge -
。json
題外話,cd -
表明進入最近目錄,也至關實用。ui
git checkout -
git merge -
複製代碼
統計項目各個成員 commit 的狀況,好比你能夠查看你本身的項目的 commit 數以及他人對你項目的貢獻數spa
git shortlog -sn
git shortlog -sn --no-merges # 不包含 merge commit
複製代碼
若是你的 commit message 比較規範,好比會關聯 issuse 或者當前任務或者 bug 的編號,此時根據 commit message 快速定位: git log --grep "Add"
。code
若是你的 commit message 不太規範,只記得改了哪幾行代碼,此時也能夠根據每次提交的信息查找關鍵字,是 git log -S "setTimeout"
。cdn
同時,也能夠根據做者,時間來輔助快速定位。ip
git log --since="0 am"     # 查看今日的提交
git log --author="shfshanyue" # 查看 shfshanyue 的提交
git log --grep="#12" # 查找提交信息中包換關鍵字的提交
git log -S "setTimeout" # 查看提交內容中包換關機子的提交
複製代碼
如何查找包換關鍵字的所有文件?
使用 VS Code
能夠全局搜索,使用 grep
也能夠經過 grep -rn <keyword>
來全局搜索。
不過,它們也會連帶搜索忽略文件,好比前端著名的兩個文件夾 node_modules
和 public(dist/build)
。雖然 grep 能夠指定 --exclude
來忽略文件,不過 git
來的更方便一些。
這時,可使用 git grep <keyword>
來解決這個問題,另外 ag 也能夠解決這個問題。
grep -rn <keyword>
grep -rn <keyword> --exclude config.js --exclude-dir node_modules
git grep <keyword>
ag <keyword>
複製代碼
歡迎關注個人公衆號山月行,在這裏記錄着個人技術成長,歡迎交流