展开菜单
首页 精品内容 本月促销 装机必备 Windows macOS软件 IOS软件 Android AI PDF教程 专题
全部分类

当前位置:

首页 > 编程开发 > git提交时怎么只选部分修改?手把手教你精准暂存

git提交时怎么只选部分修改?手把手教你精准暂存

从普通目录完成第一次本地提交其实并不难,难的是真实开发很少会一直保持"只改一个文件,然后立刻提交"这种理想状态。 写一个功能的时候,往往会出现好几种情况混在一起: 当前真正要提交的代码; 顺手改了一下但应该单独提交的文档; 运行程序产生的日志文件; 只属于本机环境、不上传配置。 这时候,add 和

从普通目录完成第一次本地提交其实并不难,难的是真实开发很少会一直保持"只改一个文件,然后立刻提交"这种理想状态。

git提交时怎么只选部分修改?手把手教你精准暂存

写一个功能的时候,往往会出现好几种情况混在一起:

  • 当前真正要提交的代码;
  • 顺手改了一下但应该单独提交的文档;
  • 运行程序产生的日志文件;
  • 只属于本机环境、不上传配置。

这时候,addcommit 本身并不难,真正需要判断的是:

哪些变化属于这次提交,哪些应该留在外面?

四个检查窗口

一次提交前后,可以从四个角度观察仓库:

想知道什么命令
哪些路径发生了变化,分别位于哪一层git status --short
工作区相对暂存区还有哪些具体变化git diff
暂存区相对当前提交准备记录什么git diff --cached,也可以使用 git diff --staged
提交完成后形成了什么历史git log --oneline、git show

status 先告诉我们"哪里有变化",diff 再说明"内容怎么变的",logshow 用于提交后核对已经形成的记录。简单来说,就是一套从"发现问题"到"确认结果"的完整流程。

准备独立实验仓库

下面的初始化和第一次提交只用于建立一个可复现的前置状态。如果本地已有同名目录,建议换一个新名字。

mkdir commit-check-lab
cd commit-check-lab
git init
git config user.name "Git Blog Lab"
git config user.email "git-blog@example.invalid"

printf "login validationn" > app.txt
printf "old documentationn" > README.md
git add app.txt README.md
git commit -m "chore: initialize commit check lab"

现在仓库里有一个初始提交,工作区是干净的。

先处理不应进入仓库的文件

运行程序时经常会产生日志,本地开发也可能需要只属于个人环境的配置。先制造两个未跟踪文件:

printf "debug outputn" > debug.log
printf "local development configurationn" > .env
git status --short

输出会包含:

?? .env
?? debug.log

它们都是工作区中的未跟踪文件。如果直接执行 git add .,就可能把不该进仓库的东西也一起放进暂存区。

解决方法是在仓库根目录创建 .gitignore

printf "*.logn.envn" > .gitignore
git status --short

现在输出中不再显示 debug.log.env,只会出现新的 .gitignore

?? .gitignore

忽略规则本身是项目约定,应该进入版本历史:

git add .gitignore
git commit -m "chore: ignore logs and local environment files"

.gitignore 的两个边界

第一,.gitignore 主要影响尚未被跟踪的路径。文件如果已经进入提交,后来补写忽略规则并不会自动停止跟踪。

如果误跟踪的是普通日志或本地生成文件,可以在写好忽略规则后停止跟踪:

git rm --cached <文件>
git add .gitignore
git commit -m "chore: stop tracking generated file"

--cached 会把删除记录放入暂存区,但保留本地工作区文件。目录需要配合 -r 使用。执行后应先用 git status 确认暂存内容,再提交这次规则变更。

第二,忽略规则不是凭据泄露后的补救工具。密钥、Token 或密码一旦进入历史,应立即轮换或作废,再根据团队流程处理仓库历史。仅仅删除文件或补写 .gitignore,不能让已经泄露的值失效。

制造一个混合修改现场

printf "check empty usernamen" >> app.txt
printf "new usage examplen" >> README.md
printf "another debug linen" >> debug.log
git status --short

输出:

 M README.md
 M app.txt

debug.log 仍存在于本地,但因为匹配 .gitignore,不会出现在普通状态结果中。

git status --short 在文件名前使用两个位置显示状态,可以写成:

XY 文件名
  • 第一个位置 X:已经进入暂存区的变化;
  • 第二个位置 Y:仍在工作区、尚未暂存的变化。

当前两个文件显示为 M:第一个位置为空,第二个位置是 M,说明文件只在工作区发生了修改,还没有进入暂存区。

diff:检查具体改了什么

先检查准备作为当前功能提交的文件:

git diff -- app.txt

这里会看到新增的 check empty username

再检查文档:

git diff -- README.md

这里会看到另一个独立意图:补充使用示例。

普通 git diff 比较的是工作区和暂存区,不会展示普通未跟踪文件的内容。因此,检查现场时不能只看 diff,还要先看 status;否则可能漏掉尚未跟踪、也未被忽略的文件。

只选择属于本次提交的变化

这次先提交登录校验,不把文档修改混进去:

git add app.txt
git status --short

输出:

 M README.md
M  app.txt

app.txtM 进入左列,说明它已经被暂存;README.md 的修改仍在工作区。

提交前检查暂存区中的实际内容:

git diff --cached -- app.txt

这里只应该出现与登录校验有关的变化。确认边界正确后再提交:

git commit -m "feat: validate empty username"

一次提交可以同时包含代码、测试和必要文档,关键不是"只能改一个文件",而是这些变化能否共同表达同一个意图,并且可以一起评审和撤销。

提交后不要立即离开

提交完成后先看状态:

git status --short

输出:

 M README.md

这说明功能变化已经提交,文档修改仍然安全地留在工作区。提交不会自动带走没有进入暂存区的变化。

接着查看最近历史:

git log --oneline -3

这条命令用于快速确认最近提交的顺序和说明。

查看刚才那次提交涉及哪些文件:

git show --stat HEAD

查看提交的完整内容:

git show HEAD

HEAD 表示当前检出位置对应的提交。在通常的分支状态下,它通过当前分支定位到最新提交。

确认功能提交没有混入 README 后,再把文档作为独立提交:

git add README.md
git diff --cached -- README.md
git commit -m "docs: add usage example"
git status

最后的状态应该是干净的。

同一个文件包含两个意图怎么办

按路径执行 git add app.txt 会选择这个文件当前的全部变化。但同一个文件也可能同时包含两个不同意图。

此时可以交互式选择差异块:

git add --patch app.txt

Git 会把变化分成若干块,让我们逐块决定是否暂存。没有选中的部分仍留在工作区,不会被删除。

完成后分别检查:

git diff --cached -- app.txt
git diff -- app.txt

第一条查看已经选入下次提交的变化,第二条查看仍留在工作区的变化。如果一个差异块内部仍然混着两个意图,可以继续拆分差异块,或者先回到编辑器整理内容。

为什么不把 commit -am 当作默认动作

git commit -am "message"

这个写法会在提交前自动暂存所有已跟踪文件的修改和删除,并提交它们执行命令时的当前内容,但不会纳入普通未跟踪文件。

但问题在于,它也会绕过"选择路径 → 检查暂存差异"这个过程。如果同一个已跟踪文件在暂存后又继续修改,-a 会把后续工作区修改一起纳入提交,可能破坏原本选择好的边界。

只有当所有已跟踪变化都属于同一意图,并且已经确认过现场时,这个快捷方式才比较合适。

一次提交前后的稳定检查顺序

git status --short
  ↓
git diff
  ↓
排除不应跟踪的路径,选择本次相关变化
  ↓
git diff --cached
  ↓
git commit
  ↓
git status --short
  ↓
git log --oneline / git show

提交之前检查选择,提交之后核对结果。暂存区不是必须机械经过的一个步骤,而是编辑下一次历史记录的地方。

总结

一次清晰的提交不是靠一句漂亮的提交说明产生的,而是从检查现场、排除无关文件、选择同一意图的变化开始。status 定位路径,diff 核对内容,暂存区确定边界,logshow 则帮助确认最终写入了怎样的历史。

参考资料:

  • Git 官方资料:Recording Changes to the Repository
  • Git 官方资料:Viewing the Commit History
  • Git 官方文档:git-status
  • Git 官方文档:git-diff
  • Git 官方文档:git-add
  • Git 官方文档:git-commit
  • Git 官方文档:git-log
  • Git 官方文档:git-show
  • Git 官方文档:gitignore
本文内容来源于互联网,如有侵权请联系删除。
作者最新文章
编程开发
相关文章 更多
精品专题 更多
本月促销

正软商城本月促销专区,汇集办公、设计、安全、影音、系统工具及AI软件等正版软件优惠活动,提供限时折扣、特价授权和优惠购买信息,活动库存及价格以页面实时展示为准。

装机必备

正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

Windows

正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

macOS软件

正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

IOS软件

正软商城iOS软件专区,精选适用于iPhone和iPad的办公、学习、影音、设计、效率及AI应用,提供功能介绍、适用设备、系统要求和正版获取方式等信息。

AI

正软商城AI软件专区,汇集AI写作、AI绘画、AI视频、AI办公、AI编程、AI翻译、智能客服和数据分析等人工智能工具,提供功能介绍、适用平台、收费方式及正版购买信息。

PDF教程

正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

Mac软件 更多
灵活计算器
灵活计算器

灵活计算器是一款笔记式算数应用,支持实时计算、动态关联和云端同步功能。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

赤友清理大师
赤友清理大师

赤友清理大师是一款为 Mac 设计的智能清理优化工具,可精准扫描垃圾、大文件、重复文件等,释放磁盘空间。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

极度公式
极度公式

极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

图几
图几

图几是一款适用于 macOS 的截图、标注与美化工具,支持离线操作保障隐私。界面整理和高频系统操作被放到一起考虑,桌面或窗口内容一多时,管理起来会更省心。

密码键盘
密码键盘

密码键盘是一款兼具安全性与便捷性的高效密码管理器。日常使用里的持续防护和信息管理会更突出,适合把安全控制放进长期使用流程中的场景。

思源笔记
思源笔记

思源笔记是一款本地笔记软件,提供所见即所得的编辑方式,为长文写作带来顺滑的体验。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

Office 365 简体中文
Office 365 简体中文

一款文字处理软件,一种订阅式的跨平台办公软件,基于云平台提供多种服务,通过将 Excel 和 Outlook 等应用与 OneDrive 和 Microsoft Teams 等强大的云服务相结合,Office 365 可让任何人使用任何设备随时随地创建和共享内容。

WALTR PRO
WALTR PRO

WALTR是一款电脑至iOS文件传输转换工具,操作简单,快速实现文件识别与传送。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

CodeExpander
CodeExpander

CodeExpander 是一款快捷短语输入增强工具,通过键入缩写自动展开为自定义文段,提升工作效率。任务管理和过程控制会更完整,持续下载、批量同步或需要稳定传输流程的场景会更适合它。

Mountain Duck
Mountain Duck

Mountain Duck 是一款能将多个网盘挂载到本地的工具,像本地磁盘一样使用网盘。清理链路的完整性会更好一些,做应用卸载、残留处理和空间整理时,通常能少走很多手动排查步骤。

Menuist
Menuist

Menuist 是一款面向 macOS 的 Finder 右键菜单增强工具,主要用来补充新建文件、快捷导航等常用操作,让日常文件管理和访问路径时更高效、更顺手。

Mole
Mole

Mole 是一款专为 Mac 设计的深度清理优化工具,涵盖缓存清理、应用管理及实时状态监控等功能。清理链路的完整性会更好一些,做应用卸载、残留处理和空间整理时,通常能少走很多手动排查步骤。

WINDOWS 更多
Windows 10
Windows 10

Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。

极度公式
极度公式

极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

密码键盘
密码键盘

密码键盘是一款兼具安全性与便捷性的高效密码管理器。日常使用里的持续防护和信息管理会更突出,适合把安全控制放进长期使用流程中的场景。

思源笔记
思源笔记

思源笔记是一款本地笔记软件,提供所见即所得的编辑方式,为长文写作带来顺滑的体验。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

傲梅轻松备份
傲梅轻松备份

傲梅轻松备份是一款专业易用的数据备份软件,为重要数据提供安全保障。日常使用里的持续防护和信息管理会更突出,适合把安全控制放进长期使用流程中的场景。

Office 365 简体中文
Office 365 简体中文

一款文字处理软件,一种订阅式的跨平台办公软件,基于云平台提供多种服务,通过将 Excel 和 Outlook 等应用与 OneDrive 和 Microsoft Teams 等强大的云服务相结合,Office 365 可让任何人使用任何设备随时随地创建和共享内容。

Wise Folder Hider Pro
Wise Folder Hider Pro

Wise Folder Hider Pro 是一款专业级文件和文件夹隐藏加密软件,为私密数据添加多重保护。高频操作更强调就近处理,浏览、整理和跨目录移动文件时,来回切换和重复点击都会少很多。

WALTR PRO
WALTR PRO

WALTR是一款电脑至iOS文件传输转换工具,操作简单,快速实现文件识别与传送。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

CodeExpander
CodeExpander

CodeExpander 是一款快捷短语输入增强工具,通过键入缩写自动展开为自定义文段,提升工作效率。任务管理和过程控制会更完整,持续下载、批量同步或需要稳定传输流程的场景会更适合它。

PinStack
PinStack

PinStack是一款轻量级的Windows平台剪贴板管理工具,优化您的剪贴板使用体验。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。

Mountain Duck
Mountain Duck

Mountain Duck 是一款能将多个网盘挂载到本地的工具,像本地磁盘一样使用网盘。清理链路的完整性会更好一些,做应用卸载、残留处理和空间整理时,通常能少走很多手动排查步骤。

Seer
Seer

Seer是一款在Win平台下的空格键功能增强效率工具,只需轻敲空格键,就能预览几乎任何格式的文件。它更适合把零散的小功能集中起来使用,处理高频琐碎任务时会更省事。