看见“完成了”,还要看实际改动

Claude Code 修改代码后,先核对文件清单,再检查每段差异,最后运行与修改相关的验证。模型的完成说明可以帮助定位,但验收对象应是工作区中的实际文件和测试结果。

在 Git 仓库里,最容易遗漏的不是某一行代码,而是混淆了三种状态:尚未暂存的修改、已经暂存准备提交的修改,以及还没有被 Git 跟踪的新文件。只看一次 git diff,无法保证三种都看到了。

本文关注提交之前的检查,不会替你执行提交、推送、还原或清理操作。

先建立文件清单

进入目标仓库后执行 git status --short,先记录哪些文件改变、哪些是新增。再执行 git diff --stat 观察未暂存修改的范围;统计能帮助发现意外的大面积改动,但行数少不等于风险小。

如果看到配置、锁文件、依赖清单或数据库脚本发生变化,先问它们是否与本轮任务有关。不要因为文件名看起来“自动生成”,就跳过其对环境或行为的影响。

有自己的未提交改动时,最好保留开始任务前的清单。任务结束后对照增量,避免把原来就存在的代码误当成模型新写的内容,也避免让工具“顺手整理”与你任务无关的部分。

一次 diff 看不到所有改动:文件总览,git status --short;未暂存的修改,git diff:工作区对暂存区;已暂存的修改,git diff --cached:暂存区对提交;未跟踪的新文件,从status发现,再单独打开阅读
本站原创教学示意,非产品界面截图。差异检查与业务测试分别验收,不自动提交或清理。查看大图 ↗

分别检查未暂存、已暂存和新增文件

git diff 展示工作区相对暂存区的差异;git diff --cached 展示暂存区相对当前提交的差异。准备提交时,两份都要看,因为你可能只暂存了一部分内容,后面又继续修改。

git status --short 中的未跟踪文件需要单独打开阅读,它们通常不会出现在普通 git diff 中。检查新脚本的真实作用、输出路径和执行条件,不要只看文件名就默认安全。

文末给出一组只读检查命令。这些命令用于观察,不会自动替你暂存或提交。若有二进制文件,文本差异可能无法体现实际内容,图片和生成文件还需要相应的预览或专用检查。

每个修改块问三个问题

第一,为什么需要这一块?它是否直接解决原问题,还是引入了额外重构、依赖或配置变化?如果只能用“更规范”解释,先判断是否超出本轮范围。

第二,旧行为有什么变化?关注空输入、异常路径、权限检查、外部请求和默认值,而不只是正常流程的截图。修改一个条件分支,可能让不符合条件的用户也进入操作路径。

第三,如何验证?每个关键行为应对应一条可执行检查或明确的人工步骤。若修复的是错误返回,只有“页面能打开”并不能证明异常分支正确。

用一个小仓库理解三种状态

这是本站在隔离临时仓库中设计的验证练习:先提交一个包含 alpha 的文本文件;把它改成 beta 并暂存;再把工作区内容改成 gamma;另外新建一个尚未跟踪的说明文件。

此时普通 diff 看到的是 beta 到 gamma;cached diff 看到 alpha 到 beta;未跟踪的新文件需要从 status 中发现。如果只看其中一份输出,就会漏掉一部分最终可能提交的内容。

该练习只验证 Git 的差异查看行为,没有调用 Claude Code 修改真实项目。实际验证范围与结果记录在本站编辑检查中,不代表你的仓库已经检查完成。

检查通过不等于测试通过

git diff --check 可以发现部分空白字符错误或冲突标记等问题,但不是业务测试,也不会替你验证权限、数据库兼容或接口行为。

应根据实际修改选择验证。例如修改响应字段,就检查调用方是否仍能读取;修改表单校验,就覆盖有效、无效和缺失值;修改样式,就在必要尺寸查看页面。不要为了让报告看起来完整而重复运行与改动无关的检查。

若测试因为环境缺失不能运行,记录原因和剩余风险,不把“命令没跑起来”写成“通过”。同样,不要让模型为了让测试变绿,删除断言或改掉原本要保护的行为。

提交前留下可复核的结论

简洁记录本轮目标、实际修改范围、运行过的命令及结果,以及未验证项。需要交给他人审核时,让读者能够从差异和证据理解结论,而不是只转发模型的自评。

如果发现意外改动,先停下并保留现场,确认归属后再决定如何修正。不要直接用 git reset --hard 或 git clean 来追求“干净”,它们可能丢掉尚未保留的工作。

把三份实际输出对应起来

本站在隔离临时仓库执行了Git命令:已提交alpha,暂存beta,工作区再改为gamma,同时创建未跟踪new.txt。文末给出可复制的只读命令与关键输出。

git diff显示beta到gamma;git diff --cached显示alpha到beta;git status --short显示MM sample.txt及?? new.txt。MM的第一位描述暂存区,第二位描述工作区,不能把它解释成两次提交。

该练习只验证Git状态与差异,不代表已实测Claude Code自动选择文件,也不建议在真实仓库为复现而覆盖文件。

资料来源与核对范围

https://code.claude.com/docs/en/common-workflows

https://git-scm.com/docs/git-diff

本文依据本批保存的官方文档正文整理。原创练习与实际运行范围已在正文中区分;涉及账户界面、权限、价格和功能支持时,请按自己的产品与当前官方说明复核。