首页/开发/Git 与协作速查/git log 按路径过滤历史
Git 基础与命令88 条

git log 按路径过滤历史

只看影响指定路径的提交:git log -- <路径>;对单个文件用 --follow 可穿透重命名继续追历史。

Git 与协作速查开发更新于 2026-10-13

按路径查历史是什么

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 指定匹配方式,写法集中在一处比反复切目录更清楚。

易错点

  • 通配模式不加引号会被 shell 先展开成当前目录的文件列表,结果与预期不符,一律用单引号包住
  • --follow 不接受目录与多文件参数,全目录历史请改用普通路径过滤
  • 只写路径不写 -- 时,若恰好存在同名分支,Git 会优先按分支解析,得到的结果完全不是文件历史
  • --follow 遇到相似度不足的改名仍会断链,重命名与大幅改内容分开提交可以降低这种情况
  • 同时加 --stat 与 -p 输出很长,先用 --oneline 定位提交号,再单独查看某一条更高效

数据来源与参考

  • Git 官方文档:git-log(--follow)
  • Pro Git 2nd Edition · 2.3 查看提交历史
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌