1. 程式人生 > 其它 >git深入理解(四):git log詳解

git深入理解(四):git log詳解

技術標籤:雜項

Show commit logs 用來檢視commit日誌

git log -h
usage: git log [<options>] [<revision-range>] [[--] <path>...]
   or: git show [<options>] <object>...

    -q, --quiet           suppress diff output
    --source              show source
    --use-mailmap         Use mail map file
--decorate-refs <pattern> only decorate refs that match <pattern> --decorate-refs-exclude <pattern> do not decorate refs that match <pattern> --decorate[=...] decorate options -L <n,m:file> Process line range n,m in
file, counting from 1
普通輸出
$ git log

commit 818c5faf28d0a0e5c8133dbd77dd24e6e70db9bf (HEAD -> master)
Author: phprao <ruFMskQ0>
Date:   Tue Dec 8 10:49:12 2020 +0800

    aaaaaaa

commit 2e1b4bced0f0ce2c20362789be2878b36c6910f7
Author: phprao <ruFMskQ0>
Date:   Mon Dec 7 16:14:20 2020 +0800

    add t4

commit 8262ea4e39ea80dc56056a667e9dbdcd235efc08
Author: phprao <
ruFMskQ0> Date: Mon Dec 7 15:22:32 2020 +0800 add t3 commit f2b85bf7f7516a6a6a0768e44266d09414b03a2e Author: phprao <ruFMskQ0> Date: Mon Dec 7 15:10:04 2020 +0800 2 commit 01d308a7ef190b881969ea9b9112424819ab346a Author: phprao <ruFMskQ0> Date: Mon Dec 7 14:24:03 2020 +0800 first commit
簡化輸出
$ git log --oneline
818c5fa (HEAD -> master) aaaaaaa
2e1b4bc add t4
8262ea4 add t3
f2b85bf 2
01d308a first commit

或者

$ git log --pretty=oneline
818c5faf28d0a0e5c8133dbd77dd24e6e70db9bf (HEAD -> master) aaaaaaa
2e1b4bced0f0ce2c20362789be2878b36c6910f7 add t4
8262ea4e39ea80dc56056a667e9dbdcd235efc08 add t3
f2b85bf7f7516a6a6a0768e44266d09414b03a2e 2
01d308a7ef190b881969ea9b9112424819ab346a first commit

HEAD -> master表示當前HEAD處在這個分支下的這個commit。

指定輸出行數
$ git log --pretty=oneline -3
818c5faf28d0a0e5c8133dbd77dd24e6e70db9bf (HEAD -> master) aaaaaaa
2e1b4bced0f0ce2c20362789be2878b36c6910f7 add t4
8262ea4e39ea80dc56056a667e9dbdcd235efc08 add t3
限定指定日期範圍的log
$ git log --pretty=oneline --after='12-8-2020 00:00:00'
818c5faf28d0a0e5c8133dbd77dd24e6e70db9bf (HEAD -> master) aaaaaaa

–since --before --until --after

不填時分秒則為當前時刻。

輸出具體變動內容

-p:控制輸出每個commit具體修改的內容,輸出的形式以diff的形式給出。

$ git log --pretty=oneline --after='12-8-2020 00:00:00' -p
818c5faf28d0a0e5c8133dbd77dd24e6e70db9bf (HEAD -> master) aaaaaaa
diff --git a/q/w/t4.txt b/q/w/t4.txt
index 9513262..052e4e1 100644
--- a/q/w/t4.txt
+++ b/q/w/t4.txt
@@ -1 +1 @@
-t4
\ No newline at end of file
+t4xx
\ No newline at end of file

同樣是用來看改動的相對資訊的,–stat比-p的輸出更簡單一些

檢視某次提交的改動

git show命令同git log -p輸出類似,只不過它只顯示一個commit的內容,如果不指定commit hash, 它預設輸出HEAD指向commit的內容.

$ git show
commit 818c5faf28d0a0e5c8133dbd77dd24e6e70db9bf (HEAD -> master)
Author: phprao <ruFMskQ0>
Date:   Tue Dec 8 10:49:12 2020 +0800

    aaaaaaa

diff --git a/q/w/t4.txt b/q/w/t4.txt
index 9513262..052e4e1 100644
--- a/q/w/t4.txt
+++ b/q/w/t4.txt
@@ -1 +1 @@
-t4
\ No newline at end of file
+t4xx
\ No newline at end of file

指定某個提交

$ git show 6f43203cf463dc5320916f96abef0f1ad63428fd
commit 6f43203cf463dc5320916f96abef0f1ad63428fd (b1)
Author: phprao <ruFMskQ0>
Date:   Tue Dec 8 10:12:28 2020 +0800

    xx

diff --git a/q/w/t4.txt b/q/w/t4.txt
index 052e4e1..dab0730 100644
--- a/q/w/t4.txt
+++ b/q/w/t4.txt
@@ -1 +1,2 @@
-t4xx
\ No newline at end of file
+t4xx
+cccccccc
\ No newline at end of file
git shortlog

這個命令用來輸出彙總資訊,以作者進行分類。

$ git shortlog
phprao (5):
      first commit
      2
      add t3
      add t4
      aaaaaaa

git shortlog -s:可以用來統計每個作者的commit數量

git shortlog -n:可以用來對統計的量進行倒序排列

輸出給定的使用者提交

--author用來過濾commit,限定輸出給定的使用者

$ git log --pretty=oneline --author='phprao'
818c5faf28d0a0e5c8133dbd77dd24e6e70db9bf (HEAD -> master) aaaaaaa
2e1b4bced0f0ce2c20362789be2878b36c6910f7 add t4
8262ea4e39ea80dc56056a667e9dbdcd235efc08 add t3
f2b85bf7f7516a6a6a0768e44266d09414b03a2e 2
01d308a7ef190b881969ea9b9112424819ab346a first commit
控制是否顯示merge的commit

–merges或者–no-merges

–decoreate

該引數用來控制log輸出時,顯示對應commit所屬的branch和tag資訊

圖形化地表示出分支合併歷史

–graph

$ git log  --pretty=oneline --graph
*   faa4214bc342ade5693a7efc8a64e869965c039e (HEAD -> master) fix conflict
|\
| * 6f43203cf463dc5320916f96abef0f1ad63428fd (b1) xx
| * adda355046920ae91118cf42ec2f45190b0ec89c test
* | 818c5faf28d0a0e5c8133dbd77dd24e6e70db9bf aaaaaaa
|/
* 2e1b4bced0f0ce2c20362789be2878b36c6910f7 add t4
* 8262ea4e39ea80dc56056a667e9dbdcd235efc08 add t3
* f2b85bf7f7516a6a6a0768e44266d09414b03a2e 2
* 01d308a7ef190b881969ea9b9112424819ab346a first commit
輸出指定分支的提交記錄

git log branchname

$ git log b1 --pretty=oneline
6f43203cf463dc5320916f96abef0f1ad63428fd (b1) xx
adda355046920ae91118cf42ec2f45190b0ec89c test
2e1b4bced0f0ce2c20362789be2878b36c6910f7 add t4
8262ea4e39ea80dc56056a667e9dbdcd235efc08 add t3
f2b85bf7f7516a6a6a0768e44266d09414b03a2e 2
01d308a7ef190b881969ea9b9112424819ab346a first commit

git log --oneline branch1 ^branch2可以檢視在分支1,卻不在分支2中的提交.^表示排除這個分支

$ git log master ^b1 --pretty=oneline
faa4214bc342ade5693a7efc8a64e869965c039e (HEAD -> master) fix conflict
818c5faf28d0a0e5c8133dbd77dd24e6e70db9bf aaaaaaa
根據comment資訊過濾

–grep

$ git log --pretty=oneline --grep=test
adda355046920ae91118cf42ec2f45190b0ec89c test

預設情況下, git log --grep --author是OR的關係,即滿足一條即被返回,如果你想讓它們是AND的關係,可以加上–all-match的option