git log 默认只显示当前分支的本地提交,不联网、不同步远程状态,也不包含未提交改动;查远程需先 git fetch,查文件历史须用 -- 分隔路径,中文乱码多因终端编码非UTF-8。
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
程序猿必备版本控制工具
下载
先运行
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
是什么时候?