intent-to-add 是什么
git add -N(等价 --intent-to-add)把新文件登记进索引,但只记录「这里有个文件」,不暂存它的内容。效果是让新文件出现在 git diff 的输出里,从而能走补丁式的暂存流程。它常用于需要逐块挑选内容的场合:先把新文件登记,再配合 git add -p 交互式选择要提交的片段。注意登记不等于暂存,提交前必须真正 add。
基本信息
| 用途 | 让新文件出现在 git diff 中 |
|---|---|
| 语法 | git add -N <文件> |
| 等价 | git add --intent-to-add |
| 配套 | git add -p 逐块选择暂存内容 |
| 平台 | 任意 Git 客户端 |
典型使用场景
- 新写的文件想用补丁式流程逐块提交,需要先让它出现在 diff 里
- 把新增文件与旧文件的改动一起评审,需要统一视图
- 检查器或格式化工具只在 diff 可见时才生效
- 提交前先确认新文件内容,再决定暂存哪些片段
- 在合并或变基前快速把新文件纳入 diff 对比范围
- 排查「为什么这个新文件没出现在 diff 里」
常用示例
常用示例
git add -N newfile.py # 登记新文件但不暂存内容
git diff # 新文件内容以新增形式出现
git add -p newfile.py # 交互式选择要提交的片段
git status # 复核最终暂存状态
git commit -m 'feat: 新增校验模块'几种登记方式的区别
| 写法 | 索引中的内容 |
|---|---|
| git add <文件> | 完整内容,已暂存 |
| git add -N <文件> | 空内容占位,未暂存 |
| git add -p | 交互式选择片段 |
登记后别忘了真正 git add:直接把 intent-to-add 的文件提交上去,会把空内容记录进版本库。
用 git status 复核最容易发现问题:登记状态下文件既显示为新增又未暂存,看到这个组合就说明还没真正加入内容。
补丁式提交的完整步骤
- git add -N 把新文件登记进索引
- git diff 或 git diff --cached 确认能看到新文件内容
- git add -p 逐块挑选要提交的片段
- git commit 提交,再用 git status 复核剩余改动
它只解决「新文件在 diff 里不可见」这一个问题,与取消暂存是相反方向的操作;两件事都围绕索引展开,弄清索引概念后就不容易混淆。