<p>git log 默认只显示当前分支的本地提交,不联网、不同步远程状态,也不包含未提交改动;查远程需先 git fetch,查文件历史须用 -- 分隔路径,中文乱码多因终端编码非UTF-8。</p>

git log 默认只显示当前分支的本地提交,不联网、不同步远程状态,也不自动包含未提交的改动。想快速定位有效信息,得加参数;想查别人改了什么、某文件怎么变的、上周谁合了代码,直接输默认命令基本找不到。
git log --oneline 看不清上下文?加 --graph 和 --decorate
纯 git log --oneline 只输出一串哈希和消息,看不出分支分叉/合并关系,也看不到 HEAD 或 tag 指向哪次提交。
-
git log --graph --all --oneline --decorate能画出分支拓扑图,标出HEAD、origin/main、v1.2.0这类引用位置 - CI 脚本里别依赖这个输出——
--graph的格式不稳定,解析容易崩 - Windows CMD 下
^是特殊字符,排除分支要写成git log main "feature/*",不是git log main ^feature
查某个文件的修改历史:必须用 -- 分隔路径
输 git log src/utils.js 看似合理,但 Git 会把它当参数名解析,尤其当路径含空格或以 - 开头时直接报错。
- 正确写法是
git log -- src/utils.js,--明确告诉 Git 后面是路径,不是选项 - 想看具体改了啥,加
-p:git log -p -- src/utils.js - 只关心谁动过这文件?加
--author:git log --author="wang" -- src/utils.js
为什么 git log origin/main 找不到刚 push 的提交
因为 origin/main 是你本地缓存的远程分支指针,不是实时镜像。Git 不会在你执行 log 时自动 fetch。
- 先运行
git fetch origin main(只拉这个分支),再git log origin/main才能看到最新 - 如果直接
git fetch,会更新所有远程分支引用,但可能拉下大量无关数据 -
git pull是fetch + merge,纯查历史没必要 merge,用fetch更干净
中文提交信息乱码?不是 git log 的问题
终端编码和 Git 本身无关。git log 输出的是原始字节流,显示成方块或问号,大概率是 shell 或终端没设对 UTF-8。
- Linux/macOS:检查
locale输出里LANG是否含UTF-8 - Windows CMD:默认 GBK,
chcp 65001切到 UTF-8,但部分旧工具不兼容 - Git for Windows 自带的 Git Bash 通常没问题,优先用它
远程分支状态永远滞后于真实远程仓库,这是最常被忽略的前提。每次想确认“最新历史”,先问自己:上次 fetch 是什么时候?


















