一、Git 三阶段:代码的三次搬家
在 Git 的世界里,你本地的代码变更,需要经历三个标准阶段:
工作目录 ── git add ──→ 暂存区 ── git commit ──→ 本地仓库
本文详解 Git 版本控制的三阶段模型,包括工作目录、暂存区和本地仓库的作用及转换关系。通过实战演示展示了从文件创建、状态查看、添加到暂存区到提交的历史记录流程,并介绍了将本地项目推送到远程仓库的步骤。核心命令包括 git status、git add、git commit、git init 等,帮助开发者掌握 Git 的核心操作逻辑。

在 Git 的世界里,你本地的代码变更,需要经历三个标准阶段:
工作目录 ── git add ──→ 暂存区 ── git commit ──→ 本地仓库
这就是你电脑上能看到的那些文件和文件夹——你的代码、配置文件、README 文档,都在这里。
你可以随意修改、删除、创建文件。这是你真正'干活'的地方。
在这个阶段,Git 知道文件存在,但还没有开始正式'追踪'它们。用专业术语说,这些文件处于**'未追踪'(Untracked)**状态。
这是一个'中转站',也是 Git 最巧妙的设计之一。
你在工作目录里改完代码后,Git 会知道这些文件被改过。但要不要把这些修改真正'存起来',需要你自己决定。
git add 就是把工作目录的修改,放到暂存区里。这相当于告诉 Git:'这些是我准备要提交的。'
为什么要多此一举?因为有暂存区,你可以:
这是你电脑上的'历史档案馆'。
当你把修改从暂存区提交之后,这些修改就被永久记录在本地仓库里。每一次提交,都是一条独立的历史记录,你可以随时查看、回退。
git commit 就是把暂存区的内容,真正存进本地仓库。
光看理论可能还有点抽象,我们来实操一遍。
假设我们在项目里新建了一个 README.md 文件,写了几行描述。
git status 查看状态git status
输出会告诉你:有一个新文件 README.md,但它是**'未追踪'**状态。Git 还贴心地提示你:如果想追踪它,可以用 git add。
这就是 Git 的体贴之处——当你不知道下一步该做什么时,git status 会告诉你。
git add 添加到暂存区git add README.md # 或者想一次性添加所有变更 git add .
再次执行 git status,你会发现文件状态变了——从红色的'未追踪'变成了绿色的**'待提交变更'**。
现在,文件已经进了暂存区,准备被提交。
git commit 提交到本地仓库git commit
执行后,Git 会打开一个编辑器(可能是 Vim),让你填写提交信息——简单描述这次改了啥。保存关闭后,提交就完成了。(也可以 git commit -m "",双引号中写描述)
输出会告诉你:这次提交改了几个文件,新增了多少行代码。
再执行 git status,那些绿色的'待提交变更'消失了——说明所有修改都已经成功存进了本地仓库。
git log 查看提交历史git log
你会看到刚刚那条提交记录。注意:这个提交目前只在你的本地仓库里,远程仓库还不知道。
如果需要分享给团队,下一步就是 git push。但那是后话了。
假设你在开发一个新功能,改了 50 个文件。其中 30 个已经写完了,可以提交了;但另外 20 个还在调试,不想现在提交。
如果没有暂存区,你要么全提交,要么全不提交——都不合适。
有了暂存区,你可以:
# 只把写完的 30 个文件加到暂存区
git add file1.py file2.py ... # 写完的那 30 个
# 提交这批完成的功能
git commit -m "完成登录功能核心逻辑"
# 没写完的那 20 个文件,继续留在工作目录里慢慢调试
这就是暂存区设计的精妙之处:让你可以灵活选择哪些修改进入本次提交。
还有一种常见情况:你已经在本地写好了整个项目,现在想把它变成一个 Git 仓库,并推送到 GitHub/GitLab。
git init
执行后,项目根目录会多一个隐藏的 .git 文件夹。这是 Git 仓库的心脏——所有版本信息、配置、远程关联都存这里。如果删了它,项目就不再是 Git 仓库了。
git add .
把所有项目文件一次性加入暂存区。
git commit -m "initial code"
首次提交完成。
先在 GitHub/GitLab 上创建一个空仓库(不要初始化 README)。然后执行:
git remote add origin [email protected]:你的用户名/你的仓库名.git
origin 是远程仓库的默认别名,以后推送拉取就用这个名字。
如果你直接执行 git push,会报错:
fatal: The current branch master has no upstream branch.
意思是:你本地的 master 分支,还没有和远程的 master 分支建立对应关系。
正确的首次推送命令是:
git push --set-upstream origin master
(如果你的默认分支是 main,就把 master 换成 main)
这个命令做了两件事:
git push 就行成功后,刷新远程仓库页面,你的所有项目文件就都在云端了。
| 阶段 | 作用 | 进入命令 | 离开命令 |
|---|---|---|---|
| 工作目录 | 你真正干活的地方 | 直接修改文件 | git add |
| 暂存区 | 待提交的修改 | git add | git commit |
| 本地仓库 | 本地的历史档案馆 | git commit | git push |
核心命令回顾:
git status:随时查看当前仓库状态(最常用的命令)git add:把修改放进暂存区git commit:把暂存区的内容存进本地历史git init:把普通目录变成 Git 仓库git remote add:关联远程仓库git push --set-upstream:首次推送并建立关联理解了三阶段,你就掌握了 Git 的半壁江山。剩下的,就是在一次次提交中,让这些概念变成肌肉记忆。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML 转 Markdown 互为补充。 在线工具,Markdown 转 HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML 转 Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online
将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online