Skip to content
← 返回Git列表
Git任务与配置

Git 提交、历史与配置 · 定位历史、责任行与回归提交 ​

返回分篇目录

定位历史、责任行与回归提交 ​

先用 log 定位历史范围,再查 blame/annotate 或 bisect;作者与变更日志统计放在同组后半部分。

git log · 查看提交历史 ​

更多信息:https://git-scm.com/docs/git-log。

  • 按时间先后顺序列出当前仓库所有的提交,最近的更新排在最上面:
bash
git log
  • 查看指定文件或指定目录的历史,包括每次提交所引入的差异:
bash
git log {{[-p|--patch]}} {{路径/到/文件或目录}}
  • 显示每次提交的文件修改统计信息:
bash
git log --stat
  • 在日志旁以 ASCII 图形显示当前分支提交历史,并只展示提交消息的第一行:
bash
git log --oneline --graph
  • 在日志旁以 ASCII 图形显示整个仓库的所有提交、标签、分支:
bash
git log --oneline --decorate --all --graph
  • 查看提交消息中包含特定模式(本例 -i 不区分大小写)的提交:
bash
git log {{[-i|--regexp-ignore-case]}} --grep {{字符串}}
  • 查看特定作者的最近 N 条提交:
bash
git log {{[-n|--max-count]}} {{数字}} --author "{{作者}}"
  • 查看两个日期之间的提交(yyyy-mm-dd):
bash
git log --before "{{2017-01-29}}" --after "{{2017-01-17}}"

git blame · 显示文件每一行的最后修改者和提交哈希值 ​

更多信息:https://git-scm.com/docs/git-blame。

  • 显示文件的每一行,包含作者名字和提交哈希值:
bash
git blame {{路径/到/文件}}
  • 显示文件的每一行,包含作者邮箱和提交哈希值:
bash
git blame {{[-e|--show-email]}} {{路径/到/文件}}
  • 显示文件在指定提交时的每一行,包含作者名字和提交哈希值:
bash
git blame {{commit}} {{路径/到/文件}}
  • 显示文件在指定提交之前的每一行,包含作者名字和提交哈希值:
bash
git blame {{commit}}~ {{路径/到/文件}}
  • 显示指定行范围内的作者名字和提交哈希值信息:
bash
git blame -L {{start_line}},{{end_line}} {{路径/到/文件}}
  • 忽略空白字符和行移动:
bash
git blame -w -C -C -C {{路径/到/文件}}

git annotate · 显示文件中每一行的提交哈希值和最后修改作者 ​

参见 git blame(推荐优先使用该命令)。 提供git annotate 主要是为了照顾熟悉其他版本控制系统的用户。 更多信息:https://git-scm.com/docs/git-annotate。

  • 打印文件内容,并在每行前附加作者姓名和提交哈希值:
bash
git annotate {{路径/到/文件}}
  • 打印文件内容,并在每行前附加作者邮箱和提交哈希值:
bash
git annotate {{[-e|--show-email]}} {{路径/到/文件}}
  • 仅打印匹配正则表达式的行:
bash
git annotate -L :{{正则表达式}} {{路径/到/文件}}

git bisect · 使用二分查找定位引入错误的提交 ​

Git 会自动在提交历史中来回跳转,逐步缩小问题提交的范围。 更多信息:https://git-scm.com/docs/git-bisect。

  • 在已知有问题提交和已知正常提交(通常较旧)之间开始二分查找会话:
bash
git bisect start {{问题提交}} {{正常提交}}
  • 对 git bisect 自动选中的每个提交进行测试后,标记为"正常"或"有问题":
bash
git bisect {{good|bad}}
  • 当 git bisect 定位到问题提交后,结束二分查找会话并返回原分支:
bash
git bisect reset
  • 在二分查找过程中跳过某个提交(例如因其他问题导致测试失败的提交):
bash
git bisect skip
  • 显示当前二分查找的进度日志:
bash
git bisect log

git commits-since · 显示从指定时间点以来的提交记录 ​

属于 git-extras 一部分。 更多信息:https://github.com/tj/git-extras/blob/main/Commands.md#git-commits-since。

  • 显示从昨天以来的所有提交:
bash
git commits-since {{yesterday}}
  • 显示从上周以来的所有提交:
bash
git commits-since {{last week}}
  • 显示从上个月以来的所有提交:
bash
git commits-since {{last month}}
  • 显示从昨天下午2点以来的所有提交:
bash
git commits-since {{yesterday 2pm}}

git authors · 生成 Git 仓库的提交者列表 ​

属于 git-extras的一部分。 更多信息:https://manned.org/git-authors。

  • 将完整的提交者列表输出到标准输出,而不是写入到 AUTHORS 文件:
bash
git authors {{[-l|--list]}}
  • 将提交者列表追加到 AUTHORS 文件并用默认编辑器打开:
bash
git authors
  • 将提交者列表(不包含邮箱)追加到 AUTHORS 文件并用默认编辑器打开:
bash
git authors --no-email

git contrib · 显示指定作者的提交记录 ​

属于 git-extras 一部分。 更多信息:https://github.com/tj/git-extras/blob/main/Commands.md#git-contrib。

  • 显示指定作者的所有提交哈希及对应提交信息:
bash
git contrib {{作者名}}

git count · 统计提交总数 ​

属于 git-extras 的一部分。 更多信息:https://github.com/tj/git-extras/blob/main/Commands.md#git-count。

  • 显示当前分支的提交总数:
bash
git count
  • 显示所有贡献者的提交数及总提交数(按作者统计):
bash
git count --all

git changelog · 从仓库提交和标签生成变更日志报告 ​

属于 git-extras 的一部分。 更多信息:https://manned.org/git-changelog。

  • 更新现有文件或创建新的 History.md 文件,包含自最新 Git 标签以来的提交信息:
bash
git changelog
  • 列出当前版本的提交:
bash
git changelog {{[-l|--list]}}
  • 列出从标签 2.1.0 到现在的提交范围:
bash
git changelog {{[-l|--list]}} {{[-s|--start-tag]}} 2.1.0
  • 以美观格式列出标签 0.5.0 到 1.0.0 之间的提交:
bash
git changelog {{[-s|--start-tag]}} 0.5.0 {{[-f|--final-tag]}} 1.0.0
  • 以美观格式列出提交 0b97430 到标签 1.0.0 之间的提交:
bash
git changelog --start-commit 0b97430 {{[-f|--final-tag]}} 1.0.0
  • 指定 CHANGELOG.md 作为输出文件:
bash
git changelog CHANGELOG.md
  • 完全替换当前变更日志文件的内容:
bash
git changelog {{[-p|--prune-old]}}

git cliff · 高度可定制的变更日志生成工具 ​

更多信息:https://git-cliff.org/docs/usage/args/。

  • 从 Git 仓库所有提交生成变更日志并保存到 CHANGELOG.md:
bash
git cliff > {{CHANGELOG.md}}
  • 从最新标签之后的提交生成变更日志并输出到标准输出:
bash
git cliff {{[-l|--latest]}}
  • 为当前标签对应的提交生成变更日志(需先使用 git checkout 检出到一个标签):
bash
git cliff --current
  • 为尚未打标签的提交生成变更日志:
bash
git cliff {{[-u|--unreleased]}}
  • 在当前目录生成默认配置文件 cliff.toml:
bash
git cliff {{[-i|--init]}}

git check-mailmap · 显示联系人的规范名称和电子邮件地址 ​

更多信息:https://git-scm.com/docs/git-check-mailmap。

  • 查找与电子邮件地址关联的规范名称:
bash
git check-mailmap {{邮箱@example.com}}

继续阅读