【03-暂存区是什么?理解-add-的设计】

张开发
2026/4/4 7:31:11 15 分钟阅读
【03-暂存区是什么?理解-add-的设计】
第三篇暂存区是什么理解 add 的设计很多人学 Git 卡在这里为什么修改了文件还要git add不能直接 commit 吗这篇讲清楚暂存区存在的意义。三个区域理解 Git 的工作流先记住三个区域工作区Working Directory ↓ git add 暂存区Staging Area / Index ↓ git commit 本地仓库Repository工作区你实际编辑文件的地方就是你项目的文件夹暂存区一个中间层决定哪些改动会进入下一次 commit本地仓库存放所有历史 commit 的地方也就是.git目录为什么需要暂存区直接 commit 不行吗假设你今天改了 5 个文件login.php修复了登录 bugorder.php新增了订单查询功能test.php临时测试代码还没写完如果没有暂存区你要么一次把 5 个文件全提交要么一个都不提交。这样 commit 历史会很乱——bug 修复和新功能混在一起以后排查问题会很痛苦。有了暂存区你可以# 只把 bug 修复加入暂存区gitaddlogin.phpgitcommit-mfix: 修复登录验证逻辑错误# 再把订单功能加入暂存区gitaddorder.phpgitcommit-mfeat: 新增订单查询接口# test.php 先不管继续开发暂存区就是一个草稿箱让你精确控制每次 commit 包含哪些内容。git add 的几种用法# 添加单个文件gitaddlogin.php# 添加多个文件gitaddlogin.php order.php# 添加某个目录下的所有文件gitaddsrc/# 添加当前目录下所有改动包括新文件、修改、删除gitadd.# 交互式选择精确到文件的某一段代码gitadd-plogin.phpgit add -p是个隐藏神器后面实战篇会专门讲。git status随时查看三个区域的状态gitstatus输出示例On branch main Changes to be committed: ← 已在暂存区等待 commit (use git restore --staged file... to unstage) modified: login.php Changes not staged for commit: ← 工作区有改动但还没 add (use git add file... to update what will be committed) modified: order.php Untracked files: ← Git 完全不认识的新文件 (use git add file... to include in what will be committed) test.php三种状态对应三种情况看懂这个输出你对当前仓库的状态就一目了然。从暂存区撤回加错了可以撤回到工作区# 把 login.php 从暂存区移回工作区改动保留gitrestore--stagedlogin.php# 老版本 Git 用这个gitreset HEAD login.php注意撤回暂存区不会丢失你的改动文件还在只是不会被 commit 了。小结Git 有三个区域工作区 → 暂存区 → 仓库暂存区的意义让每次 commit 只包含相关的改动历史更清晰git add把改动放入暂存区git status查看当前状态加错了用git restore --staged撤回下一篇《commit 怎么写才算合格 stash 临时存档》

更多文章