跳过正文
  1. 教程/
  2. Git 入门到实操:新手从 0 到会用提交、分支、回退和远程仓库/

Git 管理范围:理解工作区、暂存区与忽略规则

·2523 字·6 分钟
Evan Wu
作者
Evan Wu
记录 AI、技术实践、效率工具、项目经验与学习思考。

很多初学者在使用 Git 时,会遇到这样的问题:

为什么有些文件会出现在 git status 里?
为什么有些文件 Git 没有管理?
为什么写了 .gitignore 之后,文件还是被提交了?
git add . 到底添加了什么?

这些问题都和 Git 的管理范围 有关。

Git 并不会自动管理电脑里的所有文件。它只会管理当前仓库目录中,被纳入版本控制的文件。理解 Git 管理哪些文件、忽略哪些文件,是学习 Git 的基础。

Git 仓库从哪里开始?
#

一个 Git 仓库的核心标志是:

.git/

当你在某个目录执行:

git init

Git 会在当前目录下创建一个 .git 文件夹。

例如:

my-project/
├── .git/
├── README.md
├── index.html
└── style.css

这时,my-project 就是一个 Git 仓库。

Git 会管理这个仓库目录下的文件变化,但不会管理仓库目录外面的内容。

例如:

Desktop/
├── my-project/
│   ├── .git/
│   ├── README.md
│   └── index.html
└── other-file.txt

这里的 other-file.txt 不在 my-project 仓库里面,所以不会被这个 Git 仓库管理。

工作区是什么?
#

工作区就是你正在编辑的项目目录。

例如:

my-project/
├── README.md
├── index.html
└── style.css

你在 VS Code、记事本、终端里修改这些文件,都是在修改工作区。

工作区里的文件变化不一定会立刻进入 Git 历史。Git 需要你明确告诉它:哪些变化要加入下一次提交。

这个动作就是:

git add

Git 眼里的文件状态
#

在 Git 里,一个文件通常会处于下面几种状态。

未跟踪文件
#

未跟踪文件指的是:文件存在于工作区,但还没有被 Git 纳入版本控制。

例如你新建一个文件:

hello.md

然后执行:

git status

可能会看到:

Untracked files:
  hello.md

这表示 Git 看到了这个文件,但还没有开始管理它。

如果你想让 Git 管理它,需要执行:

git add hello.md

已跟踪文件
#

已跟踪文件指的是:已经被 Git 纳入版本控制的文件。

比如一个文件曾经被执行过:

git add README.md
git commit -m "add README"

那么 README.md 就是已跟踪文件。

以后你再修改 README.md,Git 就能识别它发生了变化。

已修改文件
#

已修改文件指的是:文件已经被 Git 跟踪,但内容发生了变化,还没有加入暂存区。

例如你修改了 README.md,执行:

git status

可能会看到:

Changes not staged for commit:
  modified: README.md

这表示 Git 知道这个文件被改了,但这次修改还没有准备进入下一次提交。

已暂存文件
#

已暂存文件指的是:文件变化已经通过 git add 加入暂存区,准备进入下一次提交。

例如:

git add README.md

然后执行:

git status

可能会看到:

Changes to be committed:
  modified: README.md

这表示这次修改已经进入暂存区,下一次执行 git commit 时会被保存到 Git 历史中。

暂存区是什么?
#

暂存区可以理解为:下一次提交的准备区

Git 的提交不是自动保存整个项目,而是保存你放进暂存区的内容。

基本流程是:

工作区
↓ git add
暂存区
↓ git commit
本地仓库

例如你同时修改了两个文件:

README.md
index.html

但你只想先提交 README.md,可以执行:

git add README.md
git commit -m "update README"

这时只有 README.md 的修改会进入这次提交,index.html 的修改仍然留在工作区。

这就是暂存区的意义:它允许你选择哪些修改进入下一次提交。

使用 git status 查看当前状态
#

学习 Git 时,最常用的命令之一就是:

git status

它会告诉你:

哪些文件没有被跟踪
哪些文件被修改了
哪些文件已经暂存
当前分支是否干净

建议你在每次 git addgit commit 前后都执行一次:

git status

这样可以清楚地知道当前仓库处于什么状态。

把文件加入 Git 管理
#

如果只想添加某一个文件:

git add README.md

如果想添加当前目录下的所有变化:

git add .

git add . 会把当前目录及其子目录中的新增、修改、删除变化加入暂存区。

但要注意:git add . 不是提交。

它只是把变化放进暂存区。

真正保存到 Git 历史中,还需要执行:

git commit -m "提交说明"

哪些文件不应该交给 Git 管理?
#

并不是所有文件都适合提交到 Git 仓库。

通常不建议提交这些内容:

系统临时文件
编辑器缓存文件
依赖目录
构建产物
日志文件
环境变量文件
密钥和密码

例如:

.DS_Store
node_modules/
dist/
public/
.env
*.log

这些文件要么可以重新生成,要么包含本地环境信息,要么可能包含敏感内容。

这类文件通常应该使用 .gitignore 忽略。

.gitignore 是什么?
#

.gitignore 是 Git 的忽略规则文件。

你可以在仓库根目录创建一个文件:

.gitignore

然后写入需要忽略的文件或目录。

例如:

# 依赖目录
node_modules/

# 构建产物
dist/
public/

# 环境变量
.env

# 日志文件
*.log

# macOS 系统文件
.DS_Store

这样 Git 就不会再把这些未跟踪文件显示到 git status 里。

.gitignore 的常见写法
#

忽略单个文件:

.env

忽略某个目录:

node_modules/

忽略所有 .log 文件:

*.log

忽略某个目录下的文件:

public/
dist/

添加注释:

# 这里是注释

已经被 Git 跟踪的文件,.gitignore 还生效吗?
#

这是初学者非常容易踩坑的地方。

如果一个文件已经被 Git 跟踪,那么你后来把它写进 .gitignore,Git 仍然会继续跟踪它。

例如,假设 .env 已经被提交过:

git add .env
git commit -m "add env file"

后来你在 .gitignore 里写:

.env

这并不会让 Git 自动停止跟踪 .env

你需要执行:

git rm --cached .env

然后提交这次变化:

git commit -m "stop tracking env file"

这条命令的意思是:从 Git 版本控制中移除 .env,但保留本地文件。

如果是目录,例如 public/

git rm -r --cached public/

然后:

git commit -m "stop tracking public directory"

如何判断文件为什么被忽略?
#

如果你发现某个文件没有出现在 git status 中,可以用:

git check-ignore -v 文件名

例如:

git check-ignore -v .env

如果这个文件被忽略,Git 会告诉你是哪一条规则导致它被忽略。

这在 .gitignore 规则比较多的时候很有用。

一个完整示例
#

假设你有一个项目:

my-blog/
├── content/
├── public/
├── themes/
├── .env
├── hugo.toml
└── README.md

其中:

content/
themes/
hugo.toml
README.md

这些通常应该交给 Git 管理。

而:

public/
.env

通常不应该提交。

你可以创建 .gitignore

public/
.env
.DS_Store

然后执行:

git status

确认 Git 不再提示这些被忽略的文件。

接着添加需要管理的内容:

git add content themes hugo.toml README.md .gitignore

提交:

git commit -m "initialize blog project"

这样你的仓库就只会管理真正需要保存的内容。

常见误区
#

.gitignore 会删除文件吗?
#

不会。

.gitignore 只是告诉 Git 不要跟踪某些文件。

它不会删除本地文件,也不会自动删除远程仓库里已经存在的文件。

git add . 会提交文件吗?
#

不会。

git add . 只是把变化加入暂存区。

真正提交需要执行:

git commit -m "提交说明"

Git 会自动管理所有文件吗?
#

不会。

Git 只会管理仓库目录里的内容,并且只有被纳入版本控制的文件才是已跟踪文件。

忽略规则写了为什么没生效?
#

常见原因是文件已经被 Git 跟踪。

这种情况下需要先执行:

git rm --cached 文件名

然后再提交。

小结
#

理解 Git 的管理范围,关键是分清楚下面几个概念:

工作区:你正在编辑的项目文件
暂存区:下一次提交的准备区
本地仓库:保存提交历史的地方
未跟踪文件:Git 看到但还没管理的文件
已跟踪文件:已经被 Git 纳入版本控制的文件
.gitignore:告诉 Git 哪些未跟踪文件应该忽略

最常用的检查命令是:

git status

最常用的添加命令是:

git add 文件名

或者:

git add .

如果你能理解“工作区 → 暂存区 → 本地仓库”这个流程,就已经掌握了 Git 文件管理的核心。