今天我们来实践:使用 git 比较 esp-idf 两个不同分支的 commit,在这里我想比较的是 esp-idf 的 v3.3.1 与 v3.1.6。话不多说,直接进入正题吧!
1. git 相关指令与输出文本展示
我们先来直接了解使用的 git 指令与输出文本,随后在后续的小节中我们来逐一分解学习指令中的每个部分所具有的功能。以下是我使用的 git 指令:
git shortlog --left-right v3.1.6...v3.3.1 --grep "fix wifi" --pretty=format:"%h - %an, %ar : %s" >> ~/Downloads/bugfix_wifi.log
其中的 v3.1.6...v3.3.1
也可以用对应的 commit id 来替代,如下:
git shortlog --left-right 2c780ab...143d26a --grep "fix wifi" --pretty=format:"%h - %an, %ar : %s" >> ~/Downloads/bugfix_wifi.log
此时输出文本已经保存在 ~/Downloads/bugfix_wifi.log
,如下:
He Yin Ling (2):
f30c415cd - He Yin Ling, 7 months ago : test: fix some wifi case issues:
d3a29c2d0 - He Yin Ling, 7 months ago : test: fix some wifi case issues:
Jiang Jiang Jian (7):
7707b9fc9 - Jiang Jiang Jian, 1 year, 3 months ago : Merge branch 'bugfix/tw26696_fix_wifi_timer_v3.1' into 'release/v3.1'
0de637cf9 - Jiang Jiang Jian, 1 year, 3 months ago : Merge branch 'bugfix/tw26711_fix_wifi_memory' into 'master'
7778b9d83 - Jiang Jiang Jian, 1 year, 3 months ago : Merge branch 'bugfix/tw26711_fix_wifi_memory_v3.1' into 'release/v3.1'
26bcb7f2c - Jiang Jiang Jian, 1 year, 2 months ago : Merge branch 'bugfix/wifi_sta_sniffer_phy_config_bug' into 'master'
37c9b4056 - Jiang Jiang Jian, 1 year, 2 months ago : Merge branch 'bugfix/wifi_sta_sniffer_phy_config_bug_v3.1' into 'release/v3.1'
14d7a6345 - Jiang Jiang Jian, 1 year, 1 month ago : Merge branch 'bugfix/wifi_rx_fail' into 'master'
b94341c4e - Jiang Jiang Jian, 5 months ago : Merge branch 'bugfix/fix_wifi_bugs_for_authmode_and_multi_ssid_v3.1' into 'release/v3.1'
Liu Zhi Fu (3):
f97e2d3bd - Liu Zhi Fu, 1 year, 3 months ago : Bugfix/tw26696 fix wifi timer v3.1 (backport v3.1)
20217c7df - Liu Zhi Fu, 1 year, 3 months ago : esp32: fix wifi memory leak
6159788b9 - Liu Zhi Fu, 1 year, 3 months ago : esp32: fix wifi memory leak
liu zhifu (2):
896d597ad - liu zhifu, 6 months ago : esp32: fix wifi stop bug
9a1b11c81 - liu zhifu, 6 months ago : esp32: fix wifi stop bug
qiyueixa (1):
2b8346081 - qiyueixa, 1 year, 1 month ago : wifi: fix wifi rx fails
zhangyanjiao (1):
6020bd526 - zhangyanjiao, 5 months ago : wifi: fix wifi bugs for authmode and multi ssid
这样我们就成功打印并保存了 esp-idf 的 v3.3.1 与 v3.1.6 之间关于 fix wifi
词条的不同改动。如果对上述 git 指令中每个部分的功能感兴趣,可以继续阅读下一小节。
2. git 指令各部分解释
在这一节中,我将把上述 git 指令拆分成以下几个单独的功能进行解释:
- 以作者进行分类来汇总输出文本
- 比较 esp-idf 两个不同分支的 commit
- 筛选包含特定文本的信息
- 定制输出文本的格式
- 保存输出文本到本地
2.1 以作者进行分类来汇总输出文本
将 git log
变成 git shortlog
,即可以作者进行分类来汇总输出文本。
git shortlog -s:可以用来统计每个作者的commit数量
git shortlog -n:可以用来对统计的量进行倒序排列
2.2 比较 esp-idf 两个不同分支的 commit
使用 git shortlog --left-right v3.1.6...v3.3.1
即可,以下是此指令的用法总结。
比如我们有 2 个分支:master, dev,现在想查看这两个 branch 的区别,有以下几种方式:
- 查看 dev 有,而 master 中没有的:
git log dev ^master
- 查看 master 中有,而 dev 中没有的内容:
git log master ^dev
- 查看 dev 中比 master 中多提交了哪些内容:
git log master..dev
- 不管谁提交的多谁提交的少,单纯想知道有什么不一样:
git log dev...master
- 在上述情况下,再显示出每个提交是在哪个分支上:
git log --left-right dev...master
注:commit 后面的箭头,根据我们在 –left-right dev…master 的顺序,左箭头 < 表示是 dev 的,右箭头 > 表示是 master的。undefined截图中表示这三个提交都是在 master 分支上的。
2.3 筛选包含特定文本的信息
使用 --grep "fix wifi"
即可,这样我们就可以筛选出包含 fix
与 wifi
的 commit。
2.4 定制输出文本的格式
使用 git log --pretty=format:"%h - %an, %ar : %s"
即可定制要显示的记录格式。常用的格式占位符写法及其代表的意义如下:
2.5 保存输出文本到本地
在 git 指令最后加上 >> ~/Downloads/bugfix_wifi.log
,即可将输出文本以 log 形式保存在 ~/Downloads/
下,文件名为 bugfix_wifi.log
。
例:在项目根目录下执行命令,导出 git 提交记录到桌面。
git log --pretty=format:"%ai , %an: %s" --since=“100 day ago” >> ~/Desktop/commit.log