选择性提交(也称为交互式暂存)允许你精确选择要包含在提交中的更改,而不是一次性提交所有更改。
在开发过程中,我们经常在一个文件中进行多个不相关的更改。选择性提交帮助我们:
| 方面 | 传统提交 | 选择性提交 |
|---|---|---|
| 提交粒度 | 文件级别 | 代码块级别 |
| 提交质量 | 可能包含不相关更改 | 只包含相关更改 |
| 历史清晰度 | 可能混乱 | 清晰有序 |
| 审查效率 | 较低 | 较高 |
| 操作复杂度 | 简单 | 需要更多操作 |
提示: 选择性提交特别适合在单个工作会话中处理多个任务或修复多个bug的情况。
启动交互式暂存模式
对特定文件使用交互式暂存
启动完整的交互式添加界面
暂存所有更改(非交互式)
在git add -p模式下可用的命令:
典型的使用流程:
技巧: 使用s命令将大区块拆分为更小的区块,这样可以更精确地选择要暂存的代码。
在代码中进行多个更改
git status 和 git diff
git add -p
git commit -m "描述"
使用e命令手动编辑区块:
使用e命令后,可以手动编辑区块,删除不需要的行:
注意: 手动编辑区块时,以#开头的行会被忽略。这样可以方便地注释掉不想暂存的部分。
在开发新功能时发现并修复了一个bug。
在重构代码的同时添加了新功能。
在修改代码时进行了格式化调整。
在调试时添加了临时日志或调试代码。
在一个工作会话中处理了多个任务。
只想提交部分更改,保留其他更改继续工作。
s拆分为小块e命令精确控制要暂存的内容d跳过当前文件的所有剩余区块/搜索特定模式的更改a暂存当前文件的所有剩余区块注意: 交互式暂存只处理已跟踪文件的更改。对于新文件,需要先使用git add <file>将其添加到Git跟踪中。
高级技巧: 结合使用git stash -p可以进行交互式储藏,选择性地储藏部分更改,这在需要临时清理工作区时非常有用。
每个提交应该只解决一个问题或实现一个功能:
编写有意义的提交信息:
小而频繁的提交:
创建Git别名简化操作:
提示: 使用git config --global alias.ap 'add -p'可以创建git ap作为git add -p的快捷方式。
可以使用git reset HEAD <file>取消暂存整个文件,或者使用git reset -p进行交互式取消暂存。
新文件需要先使用git add <file>添加到Git跟踪中,然后才能使用交互式暂存。
git ap别名(如果设置了)a和d快速处理整个文件/搜索特定模式的更改选择性储藏部分更改:
选择性取消暂存:
选择性丢弃工作区更改:
整理提交历史:
专业工作流: 结合使用交互式暂存和交互式变基可以创建非常清晰和有条理的提交历史,这对于长期项目维护和团队协作非常有价值。