# Git log

显示提交日志信息。

# 概览

设置类型 参数 描述
显示格式
-p 按补丁显示每个更新间的差异,比下一条 --stat 命令信息更全
--stat 显示每次更新的修改文件的统计信息,每个提交都列出了修改过的文件,以及其中添加和移除的行数,并在最后列出所有增减行数小计
--shortstat 只显示 --stat 中最后的行数添加修改删除统计
--abbrev-commit 显示简短且唯一的  SHA-1  值
--name-only 显示每次修改的文件列表
--name-status 显示每次修改的文件列表(包含状态)
--graph 显示 ASCII 图形表示的分支合并历史
--decorate 查看各个分支当前所指的对象
--oneline 单行显示,只显示哈希值和提交说明
--relative-date 显示相对时间
—pretty= 使用其他格式显示历史提交信息,可选项有:oneline, short, medium, full, fuller, email, raw 以及 format
--date= 定制后边如果出现 %ad%cd 时的日期格式,预选项包括(relative、local、default、iso、rfc、short、raw)
筛选内容
-n 显示前 n 条提交信息
--after= (--before=)显示指定时间之前或之后的内容
--grep= 对提交描述进行帅选,如果想同时使用 --grep--author,必须在附加一个 --all-match 参数
--<filename> 只显示包含指定文件的提交,你可以使用正则,也可以省略前面的 --,但是需要把该参数放在命令的最后
--<branchname> 只显示指定分支的上的提交记录,也可以省略前面的 --,如果与指定的文件名同名则需要使用 -- 加以区分,在其后面的为文件名
--branches=<pattern> 默认所有的参数  refs/heads  都在命令行中列为  <commit>,指定模式后将分支限制为与给定  shell glob  匹配的分支
--author= 可以使用正则表达式来根据指定作者进行帅选
-S 显示新增和删除指定字符串的提交:git log -S <string>
-L 日志搜索功能->展示代码中一行或者一个函数的历史
其它
-g / --walk-reflogs 遍历提交祖先链的开头,将最近的条目遍历到较旧的条目
--reverse 以相反的顺序输出选择要显示的提交(不能与  --walk-reflogs  组合)
--merge 合并失败后,显示接触了合并冲突文件的提交:git log --merge
-c 合并提交的  diff 输出将同时显示每个父级与合并结果之间的差异,而不是一次显示父级与结果之间的成对差异:git log -c
--left-right 结合三点,显示每个提交到底处于哪一侧的分支: git log --left-right master...experiment

# 常见情形

查看  <file_name>  文件中 <fun_name>  函数的每一次变更:

git log -L :<fun_name>:<file_name>

# 也可以使用正则
git log -L <匹配起始位置的正则>,<匹配末端位置的正则>:<file_name>

解决冲突时一个有用的例子:

# 三点选择出合并的两个分支中一个包含而另一个不包含的提交
# 加上 --left-right 同时显示每个提交到底处于哪一侧的分支
# 加上 --merge 显示任何一边接触了合并冲突文件的提交
git log --oneline --left-right HEAD...MERGE_HEAD

显示指定文件的第一次提交:

git log --oneline -- <file_name> | tail -n 1