git log详解

git log 功能详解

命令模式:git log [options] [<file> <commit> <tag>...]

如果不加其它选项,默认情况下,这个命令按提交的先后顺序由近到远显示提交日志,包括每个提交的 SHA-1 校验和、作者的名字和电子邮件地址、提交时间以及提交说明等信息。

如果加文件名作为参数,那么就会只查看跟某个文件有关的提交历史;

如果指定某次提交的校验和或者标签名作为参数,那么就会查看指定提交或标签之前的提交历史。

命令选项如下图:

git log详解

示例:

# 只查看最近的 3 次提交:
git log -3
或:
git log -n 3

# 如果想要查看每次提交的文件增删数量,使用 --stat 选项:
git log --stat

# 如果想要查看每次提交中文件的详细修改内容,使用 -p 选项:
git log -p

# 如果嫌输出信息太多,可以加一个 --oneline 参数:
git log --oneline #相当于:git log --pretty=oneline --abbrev-commit

# 合并分支的时候经常产生合并提交,这些合并提交可能对我们查看过去工作并无用处,但会让提交历史变得很长,可以使用 --no-merges 选项在查看提交历史使去掉合并提交
git log --no-merges
git log --merges

# 只显示 2 周以来的提交:
git log --since='2 weeks'

# 只查看标签 v1.0 之前的提交历史:
git log v1.0

# 查看标签 v1.0 之后的提交历史:
git log v1.0..

# 查看某两次提交之间的提交历史:
git log v1.0..v2.0 #不包括 v1.0

# 查看在 feature 分支,但不在 master 分支的提交:
git log master..feature

#只查看跟某个文件有关的提交历史:
git log -- test.txt #当要指定文件名作为参数时,一般要放在命令的最后

导出到excel文件
git log --date=iso --pretty=format:’"%h","%an","%ad","%s"’ >> ./commit.csv

自定义显示格式
使用 git log --pretty=format:<string> 命令自定义提交历史的显示格式, 一般是一些格式占位符,表明要显示的内容,常用格式占位符写法如下:

git log详解

例如,想要在查看提交时,显示提交的简写哈希值、作者名字、提交时间和提交说明,可以这样写:
git log --pretty=format:"%h %an %cd %s"
也可以在 中加入直接显示的普通字符,例如:
git log --pretty=format:"%h-%an %cd : %s"
这个命令会在哈希值和作者名字之间加一个短横线,在提交说明前面加一个冒号。

自定义颜色和字体属性
在自定义提交历史的显示格式的时候也可以自定义显示的颜色和字体属性,例如:
--pretty=format:"%Cred%h%Creset -%C(yellow)%d%Cblue %s %Cgreen(%cd) %C(bold blue)<%an>%Creset"
在这个命令中,%C 后面跟一个表示颜色的单词用来设置后面内容的显示颜色,如 %Cred%h 表示使用红色显示提交的简写哈希值,%Cgreen(%cd) 表示使用绿色显示提交的时间,常用颜色有:reset(默认灰色),normal,black,red,green,yellow,blue,white。

也可以在 %C 后面同时设置字体和颜色,此时需要将字体和颜色用括号括起来,如 %C(bold blue)<%an> 表示使用蓝色显示作者名字,同时加粗,常用字体属性有:bold(加粗),dim(淡化), ul(下划线), blink, reverse(选中)。当然,也可以只设置字体属性。

自定义时间格式
当自定义显示格式里面使用 %ad 或 %cd 显示提交时间的时候,可以使用 --date= 选项 指定日期的显示格式。常用选项有:

git log详解

也可以使用 --date=format:<string> 自定义时间的显示格式。比如 --date=format:"%Y-%m-%d %H:%M:%S",常用的格式占位符有:

git log详解

git log 有关别名设置举例

git config --global alias.lg "log --no-merges --color --date=format:'%Y-%m-%d %H:%M:%S' --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cd) %C(bold blue)<%an>%Creset'"
git config --global alias.lgm "log --color --graph --date=format:'%Y-%m-%d %H:%M:%S' --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cd) %C(bold blue)<%an>%Creset'"
git config --global alias.lgs "log --no-merges --color --stat --date=format:'%Y-%m-%d %H:%M:%S' --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cd) %C(bold blue)<%an>%Creset'"

Tags: none

添加新评论