Git的暂存区(Staging Area,也称为索引)是工作流程中的关键环节,用于选择性地管理和组织代码更改。以下是使用暂存区的核心技巧和最佳实践:
一、暂存区的基本概念
三层结构
- 工作区(Working Directory):实际编辑的文件。
- 暂存区(Staging Area):准备提交的更改。
- 本地仓库(Local Repository):已提交的历史记录。
作用
- 允许将一次大的修改拆分为多个小提交(如功能修改+测试代码)。
- 支持部分提交(只提交某些文件或文件的部分内容)。
- 作为工作区和仓库之间的缓冲带,避免误提交。
二、核心命令
1. 添加文件到暂存区
git add [文件名] # 添加单个文件
git add . # 添加所有更改(包括新增和删除)
git add -u # 仅添加已跟踪文件的更改(不包括新增文件)
git add *.js # 添加所有.js后缀的文件
2. 从暂存区移除文件
git restore --staged [文件名] # 取消暂存(退回工作区)
3. 查看暂存区状态
git status # 显示工作区和暂存区的差异
git diff # 查看工作区 vs 暂存区的差异
git diff --staged # 查看暂存区 vs 本地仓库的差异
4. 部分暂存(交互式暂存)
git add -p [文件名] # 交互式暂存(逐块选择更改)
三、高级技巧
1. 交互式暂存(git add -p
)
按块(hunk)选择要暂存的更改,适合混合修改的文件。
示例:
git add -p src/app.js # 对app.js进行交互式暂存
操作界面会显示每个更改块,你可以选择:
y
:暂存此块n
:跳过此块s
:拆分此块(如果包含多个逻辑更改)e
:手动编辑此块
2. 暂存特定行
在交互式暂存中,使用 e
编辑块时,可以直接删除不想暂存的行,只保留需要的部分。
3. 暂存与撤销修改
暂存部分文件:
git add file1.js file2.css # 只暂存特定文件
撤销工作区修改:
git restore [文件名] # 丢弃工作区的修改(未暂存的)
撤销暂存区修改:
git restore --staged [文件名] # 取消暂存,保留工作区修改
4. 使用暂存区组织提交
将相关更改分组到不同提交中,例如:
# 第一次提交:只包含功能代码
git add src/feature/
git commit -m "feat: 添加用户认证功能"
# 第二次提交:只包含测试代码
git add test/feature/
git commit -m "test: 添加用户认证测试"
四、场景应用
1. 拆分混合修改
假设你同时修改了功能代码和修复了样式问题:
# 1. 先暂存样式修复
git add styles.css
git commit -m "fix: 修复按钮样式"
# 2. 再暂存功能修改
git add src/feature.js
git commit -m "feat: 实现新的数据加载逻辑"
2. 修复上一次提交
使用 git add
+ git commit --amend
修改最近一次提交:
# 1. 修改代码后
git add [修改的文件]
# 2. 合并到上一次提交(不新增提交)
git commit --amend --no-edit
3. 暂存区冲突解决
当合并或变基时,暂存区会显示冲突状态:
# 查看冲突文件
git status
# 手动编辑冲突文件后
git add [已解决的文件]
git commit # 完成合并
五、最佳实践
小而专注的提交
使用暂存区将修改组织成逻辑清晰的小提交,便于后续审查和回滚。提交前检查
git diff --staged # 提交前确认暂存区内容
避免提交无关更改
使用git add -p
确保只提交需要的部分,清理调试代码或临时修改。利用
.gitignore
在项目根目录创建.gitignore
文件,避免暂存不需要的文件(如日志、编译产物)。
六、常见问题
1. 误暂存了不需要的文件
git restore --staged [文件名] # 取消暂存
2. 想暂存整个文件,但部分内容需要保留
# 1. 先暂存整个文件
git add [文件名]
# 2. 恢复工作区中的特定行(保留修改)
git restore [文件名]
3. 忘记添加某个文件到上次提交
# 1. 添加遗漏的文件
git add [遗漏的文件]
# 2. 合并到上次提交
git commit --amend --no-edit
通过熟练使用暂存区,你可以更精细地控制代码提交,保持提交历史的整洁和可追溯性。