按路径查历史是什么
git log 加路径过滤后,只输出影响指定文件或目录的提交,回答的是「这个文件被谁、因为什么改过」。写法是用两个连字符把选项与路径分开,即 git log [选项] -- <路径>。对单个文件可加 --follow 穿透重命名继续往前追,目录则只能靠路径过滤。它是排查某处代码由来时最先用到的命令,所有平台一致。
基本信息
| 语法 | git log [选项] -- <路径> |
|---|---|
| 路径分隔 | 两个连字符,避免路径名与分支名混淆 |
| 重命名追踪 | --follow 仅支持单个文件 |
| 通配 | 模式需加引号,避免被 shell 先展开 |
| 平台 | 任意 Git 客户端 |
典型使用场景
- 定位某个文件最近被谁改动、改了什么
- 查看某个目录在版本周期内的演进
- 追一个改名文件的完整历史,需要 --follow
- 结合 --since 或 -S 在指定路径内做时间或内容筛选
- 评审前快速看目标模块有哪些提交,判断改动面
- 确认配置目录的变更节奏,排查线上异常的时间点
常用示例
常用示例
git log --oneline -- src/api/ # 只看该目录的提交
git log --oneline -- '*.md' # 通配要加引号
git log --follow -- README.md # 追改名前的历史
git log -p --since='1 month ago' -- src/# 近一个月的详细改动
git log --stat -- src/api/handler.go # 附上改动统计常用搭配选项
| 选项 | 作用 |
|---|---|
| --oneline | 每条提交压成一行,便于快速浏览 |
| --follow | 单个文件跨改名追踪 |
| --stat / -p | 显示改动统计或完整补丁 |
| --since/--until | 按时间范围过滤 |
| --author | 按作者过滤 |
路径前写两个连字符可以把选项与分支名区分开,是命令行上的好习惯;不加时若存在同名分支或文件会引发歧义。
复杂场景可用 pathspec 魔法,例如 :(exclude)模式 排除某些路径、:(glob)**/*.md 指定匹配方式,写法集中在一处比反复切目录更清楚。