好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > git log根據特定條件查詢日志并統計修改的代碼行數

git log根據特定條件查詢日志并統計修改的代碼行數

熱門標簽:聯通外呼系統電腦app軟件 400電話申請到底哪家好 400電話辦理費用低 鶴壁高頻外呼系統多少錢一個月 地圖標注項目幾個月 宿遷怎么辦理400電話 谷歌地圖標注日期 外呼系統怎么群發短信 蘇州呼叫中心外呼系統哪家強

前言

隨著年齡的增長和知識的積累,最近常常有種豁然開朗的感覺,或者對一個已經存在的事物突然有了新的認識,比如統計這個詞很早就接觸了,從沒考慮過它是什么意思,而這篇總結的題目中用了統計一詞,第一感覺應該是匯總、記錄的意思,后來去查了詞條定義,也確實就是類似的解釋,從沒有刻意去學這個詞的含義,但是在每天的生活中已經潛移默化地歸納、總結出來了。

想要統計就得有數據源,而 git log 命令恰恰就能提供這個數據源,git log 本身就是一個顯示日志的命令,日志記錄的是代碼庫變化的數據,類似于描述代碼庫變化的 “史書”,想要描述歷史就需要大量的數據支撐,想要統計修改的代碼行數,只要我們從歷史記錄中找到需要計算的部分就可以了。

git log

在統計之前我們需要先整理數據,雜亂無章的數據不是不能統計,只是計算起來更加的麻煩,所以在統計前需要先將數據規范化,所以我們需要先學習一下 git log 的相關操作。

我們以 redis 開源庫為例,切換到 6.0 分支,提交記錄定位到 7bf665f125a4771db095c83a7ad6ed46692cd314,以此為數據源,學習一下git log 的常用的查詢方法,其實使用不同的條件查詢就是整理、歸類數據的過程。

git log 的用法多種多樣,我們主要關心兩個大類,分別是條件篩選和顯示格式。

條件篩選

git log 條件篩選的選項非常多,使用條件篩選的選項會影響顯示的提交記錄的范圍,查找到想要顯示的提交記錄。

查詢最近幾條log

使用 -number 參數可以查詢最近幾條提交提交記錄:

$ git log -3
commit 7bf665f125a4771db095c83a7ad6ed46692cd314 (HEAD -> 6.0, tag: 6.0.6, origin/6.0)
Author: Oran Agra oran@redislabs.com>
Date: Sun Jul 19 14:00:20 2020 +0300

 Redis 6.0.6.

commit a5696bdf4f2687ab45f633ccb7cdc4ee9c2f957d
Author: Oran Agra oran@redislabs.com>
Date: Sun Jul 19 15:33:21 2020 +0300

 Run daily CI on PRs to release a branch

commit e15528bf1da1f1232fd08801ad382c915be94662
Author: Itamar Haber itamar@redislabs.com>
Date: Thu Jul 16 21:31:36 2020 +0300

 Adds SHA256SUM to redis-stable tarball upload

 (cherry picked from commit 5df0a64d30e7815c0a4a75a80f165fdee0bd1db6)

查詢指定作者提交

使用 --author 參數可以查詢指定作者的提交記錄:

Albert@DESKTOP-6746UC3 MINGW64 /d/data/maingit/redis (6.0)
$ git log -2 --author='Oran Agra'
commit 7bf665f125a4771db095c83a7ad6ed46692cd314 (HEAD -> 6.0, tag: 6.0.6, origin/6.0)
Author: Oran Agra oran@redislabs.com>
Date: Sun Jul 19 14:00:20 2020 +0300

 Redis 6.0.6.

commit a5696bdf4f2687ab45f633ccb7cdc4ee9c2f957d
Author: Oran Agra oran@redislabs.com>
Date: Sun Jul 19 15:33:21 2020 +0300

 Run daily CI on PRs to release a branch

查詢指定時間段的日志

這個可選參數比較多,比如 --since--until--before--after 等等,從意思很容易分辨怎么使用:

查詢2020-01-01到2020-04-01的提交記錄

$ git log -2 --after=2020-01-01 --before=2020-04-01
commit 957e917a84ac9979f18145a4d0b53386f5ce4fd9 (tag: 6.0-rc3)
Author: antirez antirez@gmail.com>
Date: Tue Mar 31 17:56:04 2020 +0200

 Redis 6.0-RC3.

commit ef1b1f01a84e969ea368e7fdbaf0d10615743269
Author: antirez antirez@gmail.com>
Date: Tue Mar 31 17:41:23 2020 +0200

 cast raxSize() to avoid warning with format spec.

恰好逮到了原作者的提交~

查詢1年前的提交記錄

$ git log -2 --until=1.year.ago
commit 86aade9a024c3582665903d0cc0c5692c6677cfd
Merge: 89ad0ca56 3bfcae247
Author: Salvatore Sanfilippo antirez@gmail.com>
Date: Thu Sep 5 13:30:26 2019 +0200

 Merge pull request #6364 from oranagra/fix_module_aux_when

 Fix to module aux data rdb format for backwards compatibility with old check-rdb

commit 3bfcae247a1c51788940bd4d2f32751ead451e42
Author: Oran Agra oran@redislabs.com>
Date: Thu Sep 5 14:11:37 2019 +0300

 Fix to module aux data rdb format for backwards compatibility with old check-rdb

 When implementing the code that saves and loads these aux fields we used rdb
 format that was added for that in redis 5.0, but then we added the 'when' field
 which meant that the old redis-check-rdb won't be able to skip these.
 this fix adds an opcode as if that 'when' is part of the module data.

查詢包含指定描述內容的提交記錄

這里用可以使用 --grep 參數,可以過濾出包含指定內容的提交記錄,這里指的是在 commit 描述中篩選符合條件的提交,比如查找提交描述中包含 client 的提交記錄:

$ git log -2 --grep='client'
commit 0f75036c07db48dfcf605e090216a4447edc38fc
Author: Wen Hui wen.hui.ware@gmail.com>
Date: Wed Jul 15 05:38:47 2020 -0400

 correct error msg for num connections reaching maxclients in cluster mode (#7444)


 (cherry picked from commit d85af4d6f5fbe9cb9787b81583627cd74b47f838)

commit f89f50dbd06247677b8cb3927cbb88c1b5384061
Author: Oran Agra oran@redislabs.com>
Date: Tue Jul 14 20:21:59 2020 +0300

 diskless master disconnect replicas when rdb child failed (#7518)

 in case the rdb child failed, crashed or terminated unexpectedly redis
 would have marked the replica clients with repl_put_online_on_ack and
 then kill them only after a minute when no ack was received.

 it would not stream anything to these connections, so the only effect of
 this bug is a delay of 1 minute in the replicas attempt to re-connect.

 (cherry picked from commit a176cb56a3c0235adddde33fcbaee2369a5af73e)

查找指定分支的提交記錄

使用 git log 默認查找的是當前分支的提交記錄,如果想查詢其他分支的記錄直接在命令后面加上分支名字就行,比如查詢 arm 分支上的提交記錄:

$ git log -2 arm
commit 7329cc39818a05c168e7d1e791afb03c089f1933 (origin/arm, arm)
Author: Salvatore Sanfilippo antirez@gmail.com>
Date: Sun Feb 19 15:07:08 2017 +0000

 ARM: Avoid fast path for BITOP.

 GCC will produce certain unaligned multi load-store instructions
 that will be trapped by the Linux kernel since ARM v6 cannot
 handle them with unaligned addresses. Better to use the slower
 but safer implementation instead of generating the exception which
 should be anyway very slow.

commit 4e9cf4cc7ed4b732fc4bb592f19ceb41d132954e
Author: Salvatore Sanfilippo antirez@gmail.com>
Date: Sun Feb 19 15:02:37 2017 +0000

 ARM: Use libc malloc by default.

 I'm not sure how much test Jemalloc gets on ARM, moreover
 compiling Redis with Jemalloc support in not very powerful
 devices, like most ARMs people will build Redis on, is extremely
 slow. It is possible to enable Jemalloc build anyway if needed
 by using "make MALLOC=jemalloc".

其實在 git 體系中,分支名、commit、標簽等擁有幾乎相同的含義,所以在很多場景下可以擴展互換,比如 git log 后面加上分支名就可以查詢指定分支的提交記錄,如果加上 commit 就會查詢這個 commit 之前的提交記錄,如果加上標簽,就可以查詢這個標簽之前的提交記錄,比如我們加一個 commit 試試:

$ git log -2 7329cc39818a05c168e7d1e791afb03c089f1933
commit 7329cc39818a05c168e7d1e791afb03c089f1933 (origin/arm, arm)
Author: Salvatore Sanfilippo antirez@gmail.com>
Date: Sun Feb 19 15:07:08 2017 +0000

 ARM: Avoid fast path for BITOP.

 GCC will produce certain unaligned multi load-store instructions
 that will be trapped by the Linux kernel since ARM v6 cannot
 handle them with unaligned addresses. Better to use the slower
 but safer implementation instead of generating the exception which
 should be anyway very slow.

commit 4e9cf4cc7ed4b732fc4bb592f19ceb41d132954e
Author: Salvatore Sanfilippo antirez@gmail.com>
Date: Sun Feb 19 15:02:37 2017 +0000

 ARM: Use libc malloc by default.

 I'm not sure how much test Jemalloc gets on ARM, moreover
 compiling Redis with Jemalloc support in not very powerful
 devices, like most ARMs people will build Redis on, is extremely
 slow. It is possible to enable Jemalloc build anyway if needed
 by using "make MALLOC=jemalloc".

因為 commit id 就是之前的 arm 分支最新的記錄,所以這個命令等價于 git log -2 arm

查詢指定 commit 之間的提交記錄

如果想查詢兩個 commit 之前的提交記錄,可以將兩個 commit id 依次放在命令后面并用 .. 連接就可以了,格式為 git log commit1..commit2,需要注意的是這樣查詢出來的提交記錄列表中不包含 commit1,其實列舉出的就是 commit1 之后又做了哪些修改提交。

$ git log e15528bf1da1f1232fd08801ad382c915be94662..7bf665f125a4771db095c83a7ad6ed46692cd314
commit 7bf665f125a4771db095c83a7ad6ed46692cd314 (HEAD -> 6.0, tag: 6.0.6, origin/6.0)
Author: Oran Agra oran@redislabs.com>
Date: Sun Jul 19 14:00:20 2020 +0300

 Redis 6.0.6.

commit a5696bdf4f2687ab45f633ccb7cdc4ee9c2f957d
Author: Oran Agra oran@redislabs.com>
Date: Sun Jul 19 15:33:21 2020 +0300

 Run daily CI on PRs to release a branch

這個特性有一個應用就是在 merge 分支之前可以查詢究竟會 merge 哪些記錄,常見的用法比如 git log feature..dev 就是列舉出 feature 分支合并到 dev 分支將要合并的提交記錄有哪些。

$ git log 6.0..unstable
commit 324e22accf457edc996971bc97f5474349cd7c4c (unstable)
Author: antirez antirez@gmail.com>
Date: Fri Dec 20 12:29:02 2019 +0100

 Fix ip and missing mode in RM_GetClusterNodeInfo().

查詢指定文件的提交記錄

查詢指定文件的提交記錄一般直接在 git log 命令后面跟上文件名就可以,但是為了避免和分支名產生分歧,所以通常在文件名前面加上 -- 用來區分,-- 這個標識符就是用來防止混淆的,放在 -- 前面的是分支名,放在后面的是文件名,相同的作用不僅僅在 git log 命令中,在其他命令比如 git checkout 中也有相同的用法。

$ git log -2 -- redis.conf
commit 7a536c2912be1fd9f62b26b7022a00644c88ef8b
Author: Yossi Gottlieb yossigo@users.noreply.github.com>
Date: Fri Jul 10 11:33:47 2020 +0300

 TLS: Session caching configuration support. (#7420)

 * TLS: Session caching configuration support.
 * TLS: Remove redundant config initialization.

 (cherry picked from commit 3e6f2b1a45176ac3d81b95cb6025f30d7aaa1393)

commit 8312aa27d47c0befcf69eb74d0a5dc19745ffd32
Author: antirez antirez@gmail.com>
Date: Mon Jun 22 11:21:21 2020 +0200

 Clarify maxclients and cluster in conf. Remove myself too.

 (cherry picked from commit 59fd178014c7cca1b0c668b30ab0d991dd3030f3)

顯示格式

git log 除了可以篩選提交記錄,還可以控制顯示格式,普通不加參數,會顯示作者、郵件、提交描述信息、日期等信息。

通過添

$ git log -1
commit 7bf665f125a4771db095c83a7ad6ed46692cd314 (HEAD -> 6.0, tag: 6.0.6, origin/6.0)
Author: Oran Agra oran@redislabs.com>
Date: Sun Jul 19 14:00:20 2020 +0300

 Redis 6.0.6.

加參數可以控制和改變顯示格式,下面來看幾條常見的

顯示單行信息

git log 默認會顯示多行信息,使用 --oneline 后每條提交記錄只顯示一行信息,可以在一屏幕中查看到更多的信息

$ git log -10 --oneline
7bf665f12 (HEAD -> 6.0, tag: 6.0.6, origin/6.0) Redis 6.0.6.
a5696bdf4 Run daily CI on PRs to release a branch
e15528bf1 Adds SHA256SUM to redis-stable tarball upload
e28aa99af Support passing stack allocated module strings to moduleCreateArgvFromUserFormat (#7528)
305143004 Send null for invalidate on flush (#7469)
29b20fd52 Notify systemd on sentinel startup (#7168)
5b3668121 Add registers dump support for Apple silicon (#7453)
0f75036c0 correct error msg for num connections reaching maxclients in cluster mode (#7444)
b1a01fda9 Fix command help for unexpected options (#7476)
83f55f61a Refactor RM_KeyType() by using macro. (#7486)

顯示每條記錄中文件修改的具體行數和行體統計

使用 --stat 參數就可以顯示每條記錄的中修改文件的具體行數和行數統計

$ git log -2 --stat
commit 7bf665f125a4771db095c83a7ad6ed46692cd314 (HEAD -> 6.0, tag: 6.0.6, origin/6.0)
Author: Oran Agra oran@redislabs.com>
Date: Sun Jul 19 14:00:20 2020 +0300

 Redis 6.0.6.

 00-RELEASENOTES | 245 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/help.h | 4 +-
 src/version.h | 2 +-
 3 files changed, 248 insertions(+), 3 deletions(-)

commit a5696bdf4f2687ab45f633ccb7cdc4ee9c2f957d
Author: Oran Agra oran@redislabs.com>
Date: Sun Jul 19 15:33:21 2020 +0300

 Run daily CI on PRs to release a branch

 .github/workflows/daily.yml | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

顯示每條提交記錄中文件的增加行數和刪除行數

使用 --numstat 參數會把 --stat 參數中合并顯示的修改行數拆分成增加行數和刪除行數

$ git log -2 --numstat
commit 7bf665f125a4771db095c83a7ad6ed46692cd314 (HEAD -> 6.0, tag: 6.0.6, origin/6.0)
Author: Oran Agra oran@redislabs.com>
Date: Sun Jul 19 14:00:20 2020 +0300

 Redis 6.0.6.

245 0 00-RELEASENOTES
2 2 src/help.h
1 1 src/version.h

commit a5696bdf4f2687ab45f633ccb7cdc4ee9c2f957d
Author: Oran Agra oran@redislabs.com>
Date: Sun Jul 19 15:33:21 2020 +0300

 Run daily CI on PRs to release a branch

4 2 .github/workflows/daily.yml

依次羅列各提交記錄中每個文件中增加的行數和刪除的行數

要想達到這個目的需要用到 --prety=tformat: --numstat 參數,這樣的顯示格式便于統計

$ git log -2 --pretty=tformat: --numstat
245 0 00-RELEASENOTES
2 2 src/help.h
1 1 src/version.h
4 2 .github/workflows/daily.yml

統計修改的代碼行數

有了前面的鋪墊,想要統一修改的行數就容易了,只要配合 awk 工具就可以完成統計了

$ $ git log -2 --pretty=tformat: --numstat | awk '{adds += $1; subs += $2; diffs += $1 - $2} END {printf "added lines: %s removed lines: %s, diff lines: %s\n", adds, subs, diffs}'
added lines: 252 removed lines: 5, diff lines: 247

還可以統計兩個分支相差的代碼行數

$ git log 6.0..unstable --pretty=tformat: --numstat | awk '{adds += $1; subs += $2; diffs += $1 - $2} END {printf "added lines: %s removed lines: %s, diff lines: %s\n", adds, subs, diffs}'
added lines: 5 removed lines: 2, diff lines: 3

到這里可以發現前面的知識都可以用上,前面篩選的參數變了,得到的結果就變了,我們可以根據需求來調整不同的參數

總結

  • git log 就是一部代碼庫記錄的“史書”,對于曾經所做的修改可以做到有史可查
  • git log 的選項參數可以分為篩選參數和格式參數,篩選參數可以選擇記錄范圍,格式參數可以控制顯示樣式
  • 統計就是按照一定規律來將數據進行匯總,在進行匯總前需要將數據進行整理,這樣匯總的工作才會更加順利

到此這篇關于git log根據特定條件查詢日志并統計修改的代碼行數的文章就介紹到這了,更多相關git log統計修改代碼行數內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Python實現一個Git日志統計分析的小工具
  • 使用python分析git log日志示例
  • 總結PHP代碼規范、流程規范、git規范
  • Git的使用規范流程總結
  • git提交驗證規范并自動生成日志文件的方法

標簽:丹東 錫林郭勒盟 襄陽 遵義 雙鴨山 莆田 鄂爾多斯 哈爾濱

巨人網絡通訊聲明:本文標題《git log根據特定條件查詢日志并統計修改的代碼行數》,本文關鍵詞  git,log,根據,特定條件,查詢,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《git log根據特定條件查詢日志并統計修改的代碼行數》相關的同類信息!
  • 本頁收集關于git log根據特定條件查詢日志并統計修改的代碼行數的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 5g影视天天5g天天爽高清在线观看| 久爱影院一区二区三区| 肉到痉挛中出痴汉在线播放| 国产精品人妻互换| 日本一级婬片A片AAA毛片男男| 馒头一线天馒头| 午夜黄色影院| 课下实践(师生1v1h)| 动漫男男Gay做受XXX动漫| 杨门女将肉艳史全文阅| 看一级特黄a大片国产| 91人妻精品丰满大屁股| 97综合精品无码人妻国色天香 | 久久久久久精品国产| 男男被c黄漫画动漫| 911嫩草亚洲精品永久一二区| 国产精品99久久| 精品黑料一区二区三区| 欧美乱辈性伦大片| 17C丨国产丨精品入口| 女人喷水的视频| 91丁香亚洲综合社区| videoscom欧美极品| 色戒无删减版在线完整| 亚洲天天做日日做天天爽| 国产精品三级电影| 97超级碰碰碰久久久观看| 国产在视频线精品视频2021| 青青草视频在线免费观看| 大尺度床吻戏| 狠狠色婷婷丁香| 黄视频国产| 国产老女人| 国产综合色精品一区二区三区| 成人性做爰AAA片免费图片不忠| 张秘书的奶又大又白又软| 俱乐部的yin乱女同| 极品尤物一区二区三区小说| 精品国产自| 狼粗大倒刺太深了拔不出来| 欧美激情视频一区二区三区不卡 |