在使用 Git 管理代码时,经常会遇到这些问题:
- 我现在在哪个分支?
- 哪些文件被修改了?
- 哪些文件还没有提交?
- 最近提交了哪些内容?
- 某一次提交到底改了什么?
- 之前切换分支或回退版本的记录还能不能看到?
这些问题都可以通过 Git 的查看类命令解决。
本文会用比较通俗的方式,介绍如何查看 Git 仓库状态与提交历史。即使你刚开始学习 Git,也可以跟着一步一步理解。
一、查看仓库当前状态#
1. 查看完整状态:git status#
最常用的命令是:
git status这个命令可以理解为:让 Git 告诉你当前仓库发生了什么。
它会告诉你:
- 当前在哪个分支
- 哪些文件被修改了
- 哪些文件已经加入暂存区
- 哪些文件还没有被 Git 管理
- 当前是否有内容需要提交
例如执行:
git status可能会看到类似结果:
On branch main
Your branch is up to date with 'origin/main'.
Untracked files:
(use "git add <file>..." to include in what will be committed)
content/zh/tutorials/git/07-status-and-log.md
nothing added to commit but untracked files present (use "git add" to track)这段信息的意思是:
你现在在 main 分支上。
你的本地 main 分支和远程 origin/main 是同步的
Git 发现了一个新文件content/zh/tutorials/git/07-status-and-log.md但是这个文件还没有被 Git 管理,也就是还没有执行 git add。
当前没有可以提交的内容,因为新文件还没有加入暂存区。
简单来说,git status 就像是查看仓库的“体检报告”。
2. 简洁查看状态:git status -s#
如果你觉得 git status 输出太长,可以使用简洁版本:
git status -s也可以写成:
git status --short示例输出:
?? content/zh/tutorials/git/07-status-and-log.md这里的含义是:
输出开头的 ?? 表示这是一个新文件,Git 还没有跟踪。
3. 常见简洁状态说明#
简介状态输出格式大致是:
XY 文件名其中:
X 表示暂存区状态,也就是有没有执行过 git add。
Y 表示工作区状态,也就是文件在本地有没有继续修改。
常见状态如下:
| 状态 | 暂存区 | 工作区 | 含义 |
|---|---|---|---|
?? | 未跟踪 | 未跟踪 | 新文件,Git 还没有跟踪 |
A␠ | 新增 | 无变化 | 新文件,已经加入暂存区 |
␠M | 无变化 | 修改 | 文件被修改了,但还没有加入暂存区 |
M␠ | 修改 | 无变化 | 文件被修改了,并且已经加入暂存区 |
MM | 修改 | 修改 | 文件加入暂存区后,又继续被修改了 |
␠D | 无变化 | 删除 | 文件被删除了,但还没有加入暂存区 |
D␠ | 删除 | 无变化 | 文件删除操作已经加入暂存区 |
R␠ | 重命名 | 无变化 | 文件重命名已经加入暂存区 |
C␠ | 复制 | 无变化 | 文件复制已经加入暂存区 |
UU | 冲突 | 冲突 | 文件有冲突,需要手动解决 |
为了看清楚状态码里的空格,上面用 ␠ 表示一个空格。实际执行 git status -s 时,不会显示 ␠ 这个符号。
简单记忆:第一个位置表示暂存区,第二个位置表示工作区。字母出现在第一个位置,通常说明已经 git add;字母出现在第二个位置,通常说明还没有加入暂存区。
这个命令适合在日常开发中快速看一眼当前仓库的变化以及状态。
二、查看文件修改内容#
1. 查看未暂存的修改:git diff#
git status 只能告诉你“哪些文件变了”,但不会告诉你“具体哪里变了”。
如果你想看具体修改内容,可以使用:
git diff这个命令会显示工作区里还没有加入暂存区的修改。
比如你修改了 README.md,运行:
git diff README.md就可以看到这个文件具体新增了哪些内容、删除了哪些内容。
可以这样理解:
git status 是看“哪些文件变了”。
git diff 是看“这些文件到底改了什么”。
2. 查看已暂存的修改:git diff –staged#
如果你已经执行过:
git add README.md那么这个文件的修改就进入了暂存区。
这时再执行:
git diff可能看不到刚才的修改。
因为 git diff 默认查看的是“还没有暂存”的内容。
如果要查看已经暂存、准备提交的内容,可以使用:
git diff --staged也可以使用:
git diff --cached这两个命令作用基本一样。
三、查看提交历史#
1. 查看完整提交历史:git log#
想看之前提交过哪些内容,可以使用:
git log这个命令会列出当前分支的提交历史。
每条提交记录通常包括:
- 提交 ID
- 提交作者
- 提交时间
- 提交说明
示例:
commit 5d6d3c6b2b1e2af7e5ac0402c38da73072d571de
Author: Evan Wu <info@evansama.com>
Date: Sat Jun 13 23:10:10 2026 +0800
new post其中 commit 后面那一长串字符就是提交 ID,也叫 commit hash。
以后如果你想查看某一次提交、回退到某一次提交,通常都会用到这个 ID。
如果日志很多,可以使用 git log -5 查看最近五次提交。
检查完毕按键盘上的 q 退出日志查看。
2. 一行显示提交历史:git log –oneline#
默认的 git log 信息比较多,不太适合快速浏览。
更常用的是:
git log --oneline示例:
a1619e7 new post
5d6d3c6 new post
3e316dd git index change
698384a git 安装文章更新
d3d9931 优化面包屑导航,文章更新这样每次提交只显示一行。
左边是简短版提交 ID,右边是提交说明。
这个命令非常适合快速了解项目最近做了哪些修改。
3. 查看某一次提交的详细内容:git show#
如果你想知道某一次提交到底改了什么,可以使用:
git show <commit-id>例如:
git show a1b2c3d这个命令会显示这次提交的详细信息,包括:
- 谁提交的
- 什么时候提交的
- 提交说明是什么
- 修改了哪些文件
- 文件中具体改了哪些代码
如果只想看这次提交影响了哪些文件,可以使用:
git show --stat a1b2c3d它会显示比较简洁的统计信息,比如哪些文件被修改,以及新增、删除了多少行。
4. 查看某位作者的提交:git log –author#
如果项目是多人协作开发,有时我们只想查看某个人提交过哪些内容。
可以使用:
git log --author="Evan Wu"这条命令会筛选出作者名称中包含 Evan Wu 的提交记录。
5. 查看某个文件的历史记录 git log – 文件名#
有时候我们不想看整个项目的提交历史,只想看某个文件的变化历史。
比如只查看 README.md 的提交记录,可以使用:
git log -- README.md如果想看这个文件每次提交具体改了什么,可以使用:
git log -p -- README.md这里的 -p 表示显示详细修改内容。
这个命令适合用来追踪某个文件为什么变成现在这样。
四、查看分支和合并关系#
1. 图形方式查看分支历史:git log –oneline –graph –all#
如果项目中有多个分支,可以使用:
git log --oneline --graph --all这个命令会用简单的字符图形显示提交之间的关系。
示例:
* 38029b8 separate search index by language
* 1d45f9e Merge branch 'blowfish-rebuild'
|\
| * 67d5cbe finalize blowfish rebuild
| * e0e9b0e update gitignore for cloudflare pages deployment
| * 8b60a89 configure blowfish homepage and basic layout
| * 288bffb migrate site from papermod to blowfish
| * 2fd59d0 init hugo modules for blowfish rebuild
|/
* 3e960fd git/install.md update
* c9a3c09 更新中文菜单,添加git教程文章
* 7966fe8 add new这里的 * 表示一次提交。
线条表示分支之间的关系。
| 表示分支线
\ 表示分支分出去或合并回来
|/ 表示分支合并回主线如果你想知道某个分支是从哪里分出来的,或者两个分支什么时候合并过,这个命令很有用。
2. 查看分支列表:git branch#
查看本地分支,可以使用:
git branch示例:
* main
dev
feature-login带 * 的分支表示你当前所在的分支。
如果想查看本地和远程的所有分支,可以使用:
git branch -a如果想查看本地分支和远程分支的对应关系,可以使用:
git branch -vv示例:
* main a1b2c3d [origin/main] update README
dev 7e6f5d4 [origin/dev] fix bug这可以帮助你判断当前分支是否关联了远程分支。
五、查看本地操作记录#
1. 查看本地操作记录:git reflog#
git log 查看的是提交历史。
但有时候,我们还想知道自己最近做过哪些 Git 操作,比如:
- 切换过哪些分支
- 回退过哪些版本
- reset 到了哪里
- commit 之后 HEAD 怎么移动过
这时可以使用:
git reflog示例:
a1b2c3d HEAD@{0}: commit: update README
9f8e7d6 HEAD@{1}: checkout: moving from dev to main
7e6f5d4 HEAD@{2}: commit: fix bug可以把 git reflog 理解为 Git 在本地记录的一份“操作日志”。
它在误删提交、错误回退版本时特别有用。
比如你不小心执行了错误的 reset,有时可以通过 git reflog 找回之前的提交位置。
2. git log 和 git reflog 的区别#
很多初学者会混淆 git log 和 git reflog。
简单来说:
git log 主要看提交历史。
git reflog 主要看本地 HEAD 的移动记录。
也就是说,git log 更像是项目的正式历史记录。
git reflog 更像是你本机上的 Git 操作记录。
需要注意的是,git reflog 是本地记录,不一定会出现在别人的电脑上。
六、常用命令汇总#
| 命令 | 作用 |
|---|---|
git status | 查看当前仓库状态 |
git status -s | 用简洁方式查看仓库状态 |
git diff | 查看还没有暂存的修改 |
git diff --staged | 查看已经暂存的修改 |
git log | 查看提交历史 |
git log --oneline | 一行显示一条提交记录 |
git log --oneline --graph --all | 用图形方式查看分支历史 |
git show <commit-id> | 查看某次提交的详细内容 |
git show --stat <commit-id> | 查看某次提交的文件修改统计 |
git log -- <file> | 查看某个文件的提交历史 |
git log -p -- <file> | 查看某个文件每次提交的具体修改 |
git branch | 查看本地分支 |
git branch -a | 查看所有分支,包括远程分支 |
git branch -vv | 查看分支和远程分支的对应关系 |
git reflog | 查看本地 HEAD 操作记录 |
git log -n 5 --oneline | 查看最近 5 条提交 |
git log --author="作者名" --oneline | 查看某位作者的提交记录 |
git log --since="1 week ago" --oneline | 查看最近一周的提交 |
git log main --oneline | 查看指定分支的提交历史 |
七、推荐日常使用命令#
日常开发中,下面这几个命令最常用:
git status -s
# 简洁查看当前仓库状态,比如哪些文件被修改、新增或删除。
git diff
# 查看工作区中还没有加入暂存区的具体修改内容。
git log --oneline --graph --all
# 用简洁的图形方式查看所有分支的提交历史和合并关系。
git branch -vv
# 查看本地分支列表,以及它们对应的远程分支和最新提交信息。它们可以帮助你快速了解:
当前有哪些文件被修改了。
这些文件具体改了什么。
最近有哪些提交。
当前分支和远程分支是否对应。
总结#
查看 Git 仓库状态与历史,是学习 Git 时非常基础也非常重要的一部分。
如果你只是想知道当前项目有没有改动,可以使用:
git status如果你想知道具体改了什么,可以使用:
git diff如果你想查看提交历史,可以使用:
git log如果你想查看某一次提交的详细内容,可以使用:
git show如果你想查看本地操作记录,可以使用:
git reflog掌握这些命令之后,你就可以更清楚地知道 Git 仓库当前处于什么状态,也能更方便地追踪项目的修改历史。