Git School · FluxGit

只提交文件中的部分修改

FluxGit ·

这些代码块对应不同情况,不是一个完整脚本。请选择适合仓库的情况,并替换分支名、路径和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 School · 1:47

Git 如何只提交文件中的部分修改

同一个文件里既有错误修复,又有调试输出?只暂存修复即可。了解 Git 暂存区、FluxGit 的 Stage change,以及 git add -p。

Git 如何只提交文件中的部分修改
旁白为英语。YouTube提供11种语言的手动字幕。此文字稿为简体中文。

在YouTube观看 — 在新标签页打开

在测试仓库中录制。

阅读旁白文字稿
  1. 00:03 你修复了一个错误,却在同一个文件里留下了调试输出。你想要一次干净的提交:只包含修复,不包含输出。
  2. 00:11 这是 FluxGit 中的 app.py,有两处修改。
  3. 00:17 Git 提交的是暂存区,而不是整个文件夹。最初,两处修改都只在磁盘上。Stage change 只把修复放入暂存区。提交只包含这些内容,调试输出仍留在磁盘上,尚未提交。
  4. 00:36 打开文件。差异视图显示两处修改,每处都有自己的 Stage change 按钮。
  5. 00:43 点击修复旁的 Stage change。只有这处修改被暂存,输出保持原样。
  6. 00:51 回到提交面板:修复已暂存,输出未暂存。
  7. 00:56 填写提交消息,然后提交。
  8. 01:06 新提交只包含修复。调试输出仍留在磁盘上,尚未提交。
  9. 01:13 改变主意了?撤销会退回这次提交。修复回到暂存区,文件保持不变。
  10. 01:22 在终端中使用 git add -p。Git 会逐处询问:修复选 yes,输出选 no,然后提交。
  11. 01:33 总结:暂存修改,而不是整个文件。每次提交只做一件事;出错时可撤销。下一课:修改最后一次提交。

相关操作

下载FluxGit