目前,在軟件開發(fā)的協(xié)作中,Git
無(wú)疑是版本控制的王者。
而其中的 git log
命令,猶如一把強(qiáng)大的歷史探尋之劍,能夠幫助我們深入洞察項(xiàng)目的演進(jìn)歷程。
本篇將為大家整理解讀幾個(gè)實(shí)用的 git Log
技巧,讓你的項(xiàng)目管理和代碼審查工作如虎添翼。
1. 挖掘代碼深處的歷史變更
git log
具備按文件內(nèi)容搜索提交的強(qiáng)大功能。
使用 git log -S "字符串"
命令,我們可以搜索提交歷史中添加了特定字符串的提交(默認(rèn)區(qū)分大小寫)。
比如,我想看看我的代碼中何時(shí)添加了class FadeVideo
,可以使用如下命令:
$ git log -S 'class FadeVideo'
commit 045447e05a735850fe7eb8274d95f7499042fe98 (HEAD -> master, origin/master, origin/HEAD)
Author: wangyubin <[email protected]>
Date: Fri Dec 20 16:50:30 2024 +0800
add animations video fade
如果想要不區(qū)分大小寫進(jìn)行搜索,可以添加 -i 選項(xiàng)。
$ git log -i -S 'class fadevideo'
commit 045447e05a735850fe7eb8274d95f7499042fe98 (HEAD -> master, origin/master, origin/HEAD)
Author: wangyubin <[email protected]>
Date: Fri Dec 20 16:50:30 2024 +0800
add animations video fade
$ git log -S 'class fadevideo' # 沒(méi)有-i選項(xiàng),搜索不到結(jié)果
結(jié)合 -p 選項(xiàng),還能同時(shí)查看這些提交的差異變化。
$ git log -i -S 'class fadevideo' -p
commit 045447e05a735850fe7eb8274d95f7499042fe98 (HEAD -> master, origin/master, origin/HEAD)
Author: wangyubin <[email protected]>
Date: Fri Dec 20 16:50:30 2024 +0800
add animations video fade
diff --git a/short_videos/animations/fade.py b/short_videos/animations/fade.py
new file mode 100644
index 0000000..e924471
--- /dev/null
+++ b/short_videos/animations/fade.py
@@ -0,0 +1,268 @@
+titles = [
+ "基本使用",
+ "FadeIn的shift參數(shù)",
+ "FadeIn的target_position參數(shù)",
+ "FadeOut的scale參數(shù)",
+]
+codes = [
+ """# 創(chuàng)建一個(gè)圓形
這在我們想要追溯某個(gè)特定代碼片段或函數(shù)是在何時(shí)被引入項(xiàng)目,以及在后續(xù)提交中如何被修改時(shí),發(fā)揮著不可替代的作用,能夠幫助我們深入理解代碼的演變邏輯。
2. 深入代碼差異的提交詳情
僅僅知道提交的存在是不夠的,很多時(shí)候我們需要了解每次提交到底對(duì)代碼做了哪些具體的更改。
git log -p
命令在顯示提交日志的同時(shí),還會(huì)展示每次提交所帶來(lái)的差異變化。
$ git log -p
commit 045447e05a735850fe7eb8274d95f7499042fe98 (HEAD -> master, origin/master, origin/HEAD)
Author: wangyubin <[email protected]>
Date: Fri Dec 20 16:50:30 2024 +0800
add animations video fade
diff --git a/main.py b/main.py
index e15c8a1..e340db1 100644
--- a/main.py
+++ b/main.py
@@ -59,6 +59,7 @@ def animations_help():
params = {
"text": "文字的創(chuàng)建與銷毀",
"graph": "圖形的創(chuàng)建與銷毀",
+ "fade": "淡入淡出",
}
這對(duì)于代碼審查、問(wèn)題排查以及理解項(xiàng)目功能的逐步演進(jìn)至關(guān)重要。
比如,當(dāng)發(fā)現(xiàn)某個(gè)功能出現(xiàn)異常時(shí),通過(guò) git log -p
查看相關(guān)提交的差異,能夠快速定位到是哪個(gè)提交引入了問(wèn)題,以及具體的代碼改動(dòng)之處,從而高效地進(jìn)行修復(fù)。
3. 對(duì)比分支開發(fā)進(jìn)度
在多人協(xié)作開發(fā)或者多分支并行開發(fā)的場(chǎng)景下,經(jīng)常需要比較不同分支之間的差異。
git log master..develop
命令就可以顯示 develop
分支中存在但 master
分支中不存在的提交。
這在準(zhǔn)備將某個(gè)分支的功能合并到主分支之前,或者想要了解不同分支的開發(fā)進(jìn)度差異時(shí)非常有用。
比如,下面我的一個(gè)項(xiàng)目,比較其中兩個(gè)分支的區(qū)別:
$ git branch
* collector
develop
master
$ git log develop..collector
commit ee035a3ed6aa71d8650d4dc823be6a6045894e11 (HEAD -> collector, origin/collector)
Author: wangyubin <[email protected]>
Date: Sun Dec 1 10:11:11 2024 +0800
use poltly to display kline
commit d8b65fad3beca572fa1e7d57fa90e5c9345e575f
Author: wangyubin <[email protected]>
Date: Sat Nov 30 00:55:49 2024 +0800
update kline utils
4. 簡(jiǎn)潔至上的提交概覽
在查看項(xiàng)目提交歷史時(shí),有時(shí)候我們不需要冗長(zhǎng)的詳細(xì)信息,只希望快速了解每個(gè)提交的大致情況。
git log --oneline
就完美地滿足了這一需求。它將每個(gè)提交壓縮成一行,僅僅展示簡(jiǎn)短的提交哈希和提交消息。
這樣一來(lái),我們能夠在有限的屏幕空間內(nèi)迅速掃視眾多提交,把握項(xiàng)目的主要更新脈絡(luò)。
$ git log --oneline
ee035a3 (HEAD -> collector, origin/collector) use poltly to display kline
d8b65fa update kline utils
f3d749a update K線顯示
540e2ef add k線查看
efaf17e update readme
30e672d add coin info utils
35cdd3e fix 數(shù)據(jù)采集改造后的錯(cuò)誤
03f1626 fix 配置文件加載錯(cuò)誤
a7e5c42 rework collector
5d69716 fix binance collector start time
8503533 rework binance collector
59cc2b6 add uv project manager
1f29fbf update binance api
924545c update 整體結(jié)構(gòu)
... ...
5. 追蹤特定文件的變更軌跡
當(dāng)我們重點(diǎn)關(guān)注某個(gè)或某些文件的歷史變化時(shí),通過(guò) git log <filename>
的形式,我們可以過(guò)濾出對(duì)指定文件進(jìn)行更改的提交。
如果需要同時(shí)查看多個(gè)文件的提交歷史,只需像 git log file1 file2 file3
這樣傳遞多個(gè)文件名即可。
$ git log .\config.py
commit 30e672d3e78c9fbc6198373940a464b8132a9b06
Author: wangyubin <[email protected]>
Date: Thu Nov 7 18:01:54 2024 +0800
add coin info utils
commit a7e5c4271cad314460a1793c8c62aa93acd70077
Author: wangyubin <[email protected]>
Date: Tue Oct 29 11:57:20 2024 +0800
rework collector
commit 5d697169b687ea02ad4723e74fbc3052e033a6c4
Author: wangyubin <[email protected]>
Date: Tue Oct 29 11:33:37 2024 +0800
fix binance collector start time
6. 基于關(guān)鍵字的提交搜索
有時(shí)候,我們只記得提交消息中的某個(gè)關(guān)鍵字或短語(yǔ),想要快速找到相關(guān)的提交。
使用 git log --grep="模式"
可以按照指定模式(默認(rèn)區(qū)分大小寫)過(guò)濾提交,
如果不希望區(qū)分大小寫,可以使用 git log -i --grep="模式"
。
這在項(xiàng)目規(guī)模較大,提交數(shù)量眾多的情況下,能夠幫助我們迅速定位到與特定任務(wù)、功能或問(wèn)題相關(guān)的提交記錄,極大地提高了代碼查找和問(wèn)題追溯的速度。
$ git log --grep "數(shù)據(jù)采集"
commit 35cdd3e75933c1a99431ea86d0625faff49f1c16
Author: wangyubin <[email protected]>
Date: Thu Oct 31 14:41:46 2024 +0800
fix 數(shù)據(jù)采集改造后的錯(cuò)誤
commit 7edf14cf0cc4478d422dd752d32de146bedefa6f
Author: wangyubin <[email protected]>
Date: Mon May 27 10:12:08 2024 +0800
update 數(shù)據(jù)采集
7. 聚焦特定開發(fā)者的工作成果
在團(tuán)隊(duì)協(xié)作開發(fā)中,了解每個(gè)成員的貢獻(xiàn)情況是非常有意義的。
git log --author="作者名"
命令允許我們按照作者來(lái)過(guò)濾提交。
git 在此處是按照正則表達(dá)式模式進(jìn)行過(guò)濾的,這意味著不需要精確的名稱匹配,也不區(qū)分大小寫。
$ git log --author="linuxr"
commit ee035a3ed6aa71d8650d4dc823be6a6045894e11 (HEAD -> collector, origin/collector)
Author: wangyubin <[email protected]>
Date: Sun Dec 1 10:11:11 2024 +0800
use poltly to display kline
commit d8b65fad3beca572fa1e7d57fa90e5c9345e575f
Author: wangyubin <[email protected]>
Date: Sat Nov 30 00:55:49 2024 +0800
update kline utils
commit f3d749a335c91385cd6443572a0e5082d05734d1
Author: wangyubin <[email protected]>
Date: Fri Nov 29 18:51:41 2024 +0800
update K線顯示
... ...
8. 突出項(xiàng)目的合并節(jié)點(diǎn)
在復(fù)雜的項(xiàng)目開發(fā)中,分支合并是常見(jiàn)的操作。
git log --merges
命令能夠讓我們專注于查看當(dāng)前分支中的合并提交。
這些合并提交往往代表著不同分支開發(fā)成果的整合,對(duì)于理解項(xiàng)目的整體架構(gòu)整合和功能合并過(guò)程具有重要意義。
$ git log --merges
commit 97078ccd1545a4d5dc73eac4f92487607ee93010 (origin/master, master)
Merge: 49a457c e49da8b
Author: wangyubin <[email protected]>
Date: Sun Oct 13 20:50:34 2024 +0800
Merge branch 'master' of gitee.com:wangyubin/b_st_middle
commit b29438b16351552a54c8e4fbe477154059d2dcd5
Merge: 9e4a212 366875c
Author: wangyubin <[email protected]>
Date: Mon May 27 10:52:28 2024 +0800
Merge branch 'master' of gitee.com:wangyubin/b_st_middle
9. 精準(zhǔn)定位特定時(shí)段的變更
在項(xiàng)目開發(fā)過(guò)程中,我們常常需要關(guān)注特定時(shí)間段內(nèi)的代碼改動(dòng),git log
提供了強(qiáng)大的時(shí)間過(guò)濾功能。
比如,當(dāng)我們想要查看 2024 年 6 月 1 日之后的提交時(shí),可以使用 git log --after="2024-06-01"
命令。
若要進(jìn)一步縮小范圍,查看 2024 年 6 月 1 日至 6 月 25 日之間的提交,只需執(zhí)行 git log --after="2024-06-01" --before="2024-06-25"
。
而且,它還支持諸如 "yesterday
"、"today
"、"10 day ago
" 等便捷的日期格式,這使得我們能夠根據(jù)實(shí)際需求靈活地篩選出所需時(shí)間段的提交記錄。
$ git log --after="2024-06-01" --before="2024-06-25" --oneline
ff5b0b1 add example single string math tex
f3aba71 優(yōu)化一些場(chǎng)景的切換
f1ca6c7 add integer video
c3a407f 生成視頻的結(jié)構(gòu)
db02c64 add main for videos
3358093 add bulleted list example
dd48bd1 add title example
bb3e513 add infra and end page
e36946a add integer example
$ git log --after "10 days ago" --oneline
045447e (HEAD -> master, origin/master, origin/HEAD) add animations video fade
22a0d9f add animations rotate example
f05b8d1 add animation graph video
2664733 add animations graph video
93cf0cf add animation indication example
d9bab37 add animations video text
9462253 add animation grow example
784d4f9 add video Polyhedron
c372485 add animation fade example
10. 個(gè)性化的提交展示
最后一個(gè)技巧是關(guān)于自定義 git log
的日志消息格式。
使用 git log --pretty=format:"格式字符串"
,我們可以根據(jù)自己的需求靈活定制日志的顯示格式。
比如,git log --pretty=format:"%Cred%an - %ar%n %Cblue %h -%Cgreen %s %n"
,
通過(guò)這種方式,我們可以選擇顯示提交作者、提交時(shí)間、提交哈希以及提交消息等不同的信息,并對(duì)其進(jìn)行顏色標(biāo)記等格式化處理,使日志信息更加清晰易讀,滿足不同場(chǎng)景下對(duì)提交信息展示的個(gè)性化要求。
注:本文轉(zhuǎn)載自“wang_yb”,如有侵權(quán),請(qǐng)聯(lián)系刪除!