只提交文件中的部分修改
这些代码块对应不同情况,不是一个完整脚本。请选择适合仓库的情况,并替换分支名、路径和VERIFIED_COMMIT。中止命令只适用于对应的正在进行的操作,不要执行两种备选方案。
简短答案
Git使用索引中的内容创建提交。只暂存修复,把其他编辑留在工作目录中,用于后续独立提交。
示例与前提
示例在同一文件中包含修复和调试输出。前提是这两处文本修改可以分别检查。
修改前检查状态
比较git diff和git diff --cached。前者显示未暂存修改,后者准确显示下一次提交将包含的内容。
git status --short
git diff
git diff --cached保留引用或独立检出
暂存一处修改不会删除剩余编辑。索引与工作目录是两个可以分别检查的状态。
第一种操作
在FluxGit中打开diff,对修复选择Stage change。检查提交面板,确认调试输出仍未暂存。
有意选择另一种结果
在终端中,git add -p可以接受或拒绝hunk。需要时可用s拆分hunk,或用e编辑补丁。
git add -p -- app.py
git diff --cached限制与例外
FluxGit的最小单位是hunk中的一处修改。若一处修改占六行,会整体暂存六行,而不是用鼠标任意选取行范围。
冲突与清理
取消暂存保留文件内容,丢弃则会改变内容。FluxGit在部分丢弃前创建安全快照;这两种操作并不相同。
验证结果
提交前阅读git diff --cached,提交后检查git show。再用git diff确认剩余工作仍保留在文件中。
git show --stat HEAD
git diff
git status --short常见问题
对于普通且未共享的提交,git reset --soft HEAD^可以把内容放回索引。先检查状态,改写共享历史前应协调。
在FluxGit中审查操作
Commit Studio同时展示diff和提交消息。编写消息时检查内容,让每次提交表达一个清晰的意图。
Git官方文档
Git 如何只提交文件中的部分修改
同一个文件里既有错误修复,又有调试输出?只暂存修复即可。了解 Git 暂存区、FluxGit 的 Stage change,以及 git add -p。
在测试仓库中录制。
阅读旁白文字稿
- 你修复了一个错误,却在同一个文件里留下了调试输出。你想要一次干净的提交:只包含修复,不包含输出。
- 这是 FluxGit 中的 app.py,有两处修改。
- Git 提交的是暂存区,而不是整个文件夹。最初,两处修改都只在磁盘上。Stage change 只把修复放入暂存区。提交只包含这些内容,调试输出仍留在磁盘上,尚未提交。
- 打开文件。差异视图显示两处修改,每处都有自己的 Stage change 按钮。
- 点击修复旁的 Stage change。只有这处修改被暂存,输出保持原样。
- 回到提交面板:修复已暂存,输出未暂存。
- 填写提交消息,然后提交。
- 新提交只包含修复。调试输出仍留在磁盘上,尚未提交。
- 改变主意了?撤销会退回这次提交。修复回到暂存区,文件保持不变。
- 在终端中使用 git add -p。Git 会逐处询问:修复选 yes,输出选 no,然后提交。
- 总结:暂存修改,而不是整个文件。每次提交只做一件事;出错时可撤销。下一课:修改最后一次提交。