首页/开发/Git 与协作速查/git status 查看仓库状态
Git 基础与命令88 条

git status 查看仓库状态

查看工作区与暂存区差异:哪些改动已暂存、哪些未暂存、哪些文件未跟踪;是提交前确认改动范围的固定动作。

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

git status 是什么

git status 汇总工作区、暂存区与当前分支的关系:哪些改动已经进入暂存区、哪些还没暂存、哪些文件完全没被跟踪,以及当前分支相对上游是领先还是落后。它是提交前确认改动范围的固定动作,也是排查「文件怎么没进提交」的第一现场。

三区视角怎么看

Git 把内容分成工作区、暂存区与提交历史三层。git status 把每层差异摊开:Changes to be committed 是已暂存即将提交的内容,Changes not staged 是已跟踪但未暂存,Untracked files 是尚未纳入版本控制的文件。三者处理方式完全不同,把未跟踪文件误当已修改是最常见的误判。

基本信息

适用平台Linux / macOS / Windows(Git 2.x)
语法git status [选项] [--] [路径]
状态层级工作区 / 暂存区 / 提交历史
常用参数-s 简短;-b 显示分支与领先落后;--ignored 显示忽略文件
性能相关大仓库可加 -uno 或限定路径提速
是否只读只读操作,不修改任何仓库状态

典型使用场景

  • 提交前核对:确认这次提交的范围与预期一致
  • 排查遗漏:文件改了却没进提交,先看它属于哪一层
  • 切换分支前检查:确认工作区干净,避免改动被带过去
  • 冲突处理:查看 Unmerged paths 列表逐个解决
  • 脚本集成:用 --short 或 --porcelain 拿到稳定输出
  • 验证忽略规则:加 --ignored 看哪些文件被规则命中

常用示例

常用示例
git status                  # 完整输出,含分支与各层改动
git status -sb              # 紧凑格式并显示分支信息
git status --short          # 两列状态码,便于扫读
git status --ignored        # 一并列出被忽略的文件
git status .                # 只看当前目录下的改动
git status --porcelain=v2   # 脚本友好的稳定格式

输出分区怎么读

区块含义下一步
Changes to be committed已暂存,会进这次提交再用 git diff --staged 通读
Changes not staged已跟踪但未暂存git add 后才会进提交
Untracked files尚未被跟踪的新文件按需 add,或补进 .gitignore
Unmerged paths冲突未解决的文件编辑后 git add 标记完成
ahead by N commits本地领先上游 N 个提交需要同步时 git push
nothing to commit工作区与 HEAD 一致确认是否真的没有改动
Untracked files 是全新文件,Changes not staged 是已跟踪文件的新改动。前者要先决定是否纳入版本控制,后者只要 add 就能进入下一次提交,处理动作并不一样。
重命名可能被显示成删除加新增。用 git status --short 配合 git diff --summary 判断 Git 是否识别为重命名,比读文字描述可靠。
跨平台项目里换行符差异也会被列为修改。先统一 core.autocrlf 或写好 .gitattributes,否则会反复出现「没改过却显示已修改」的假改动。
status 需要扫描整个工作区,超大仓库里可能明显变慢。加路径限定或用 -uno 跳过大片未跟踪目录,能显著缩短耗时,提交钩子里尤其值得注意。

两列状态码怎么看

加 --short 后每行开头有两列:左列是暂存区相对 HEAD 的状态,右列是工作区相对暂存区的状态。常见组合里 M 表示修改、A 表示新增、D 表示删除、R 表示重命名、?? 表示未跟踪。两列都非空(例如 MM)说明同一文件在两层都有改动,处理时必须分清改的是哪一层,否则容易漏提交或多提交。

两列状态码对照

标记位置含义
M 左列暂存区内容相对 HEAD 被修改
M右列工作区相对暂存区又改了,尚未 add
MM两列暂存区与工作区各有一次改动
??两列未跟踪的新文件
R 左列已暂存的重命名
A 左列已暂存的新增文件
核对改动范围的顺序是:先用 status 看清分类,再用 diff 读具体内容,最后决定 add 哪些文件。顺序颠倒容易把无关改动一起带进提交,事后返工更费时间。

易错点

  • 把未跟踪文件当成已修改文件处理,add 之后才发现提交范围与预期不符
  • 换行符差异会显示为已修改,跨平台项目先统一 core.autocrlf 或 .gitattributes 再判断
  • 重命名文件可能显示为「删除 + 新增」,需用 git status --short 配合 git diff --summary 判断
  • 大仓库里无条件全量调用 status 会拖慢提交钩子,加路径限定或 -uno 提速

数据来源与参考

  • Git 官方文档:git-status
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌