VS Code Source Control 怎样只提交选中的行
可以。VS Code 的 Source Control 支持在文件差异中只暂存选中的代码行:先从 Changes 打开目标文件,选中要进入本次提交的改动范围,再执行 Stage Selected Ranges。选中的范围会进入 Staged Changes,没有选中的修改仍留在 Changes,最后点击 Commit 时只记录已暂存的那一部分。
官方地址:https://code.visualstudio.com/docs/sourcecontrol/staging-commits
本文按“格式调整和功能修改混在同一个文件里”的场景演示。文中的界面图是原创操作示意图,不是 VS Code 的实际截图;菜单、面板和状态名称按官方 Source Control 文档组织。
先分清暂存、提交和推送
| 动作 | 作用 | 是否写入本地提交历史 | 是否上传远程仓库 |
|---|---|---|---|
| Stage | 选择下一次提交要包含的文件或代码范围 | 否 | 否 |
| Commit | 把当前已暂存快照记录到本地 Git 历史 | 是 | 否 |
| Push | 把本地提交发送到远程仓库 | 不新增本地提交 | 是 |
所以“只提交选中的行”实际分成两步:先用部分暂存挑出范围,再提交暂存区。仅仅在编辑器里选中文字不会改变 Git 的提交内容;选区必须配合 Diff Editor 的 Stage 操作才会生效。
第一步:从 Source Control 找到待处理文件
- 先保存文件,然后点击左侧 Activity Bar 的
Source Control图标;也可以使用默认快捷键Ctrl+Shift+G(macOS 为Control+Shift+G)打开源代码管理视图。 - 在侧栏的
Changes分组中找到目标文件。这里列出的是尚未暂存的修改,文件旁的状态标记通常能提示它是新增、修改还是删除。 - 点击目标文件名称,打开 Diff Editor。不要直接在普通编辑器里选一段文本后就提交,因为普通编辑器的选择不会自动变成暂存范围。

进入 Diff Editor 后,左侧是基准内容,右侧是当前工作区改动。部分暂存时主要操作右侧的变更区域:选中一段完整改动,准备让这段内容进入下一次提交。
第二步:在 Diff Editor 中选中要提交的行
- 在右侧改动区域按住鼠标拖选需要提交的连续行。选区应覆盖完整的逻辑改动,例如一组函数修改或一段配置调整;不要把一行的缩进和另一组无关改动混在同一选区中。
- 把鼠标移动到选区附近的 Diff Editor gutter。VS Code 会显示与当前范围对应的暂存操作;如果暂存按钮没有出现,先确认你打开的是
Changes下的未暂存差异,而不是Staged Changes下的已暂存差异。 - 需要用菜单操作时,在选区上点击右键,选择
Stage Selected Ranges。也可以打开命令面板(Ctrl+Shift+P,macOS 为Command+Shift+P),运行Git: Stage Selected Ranges。
这里的“Selected Ranges”是差异范围,不是任意文本复制选区。只有在 Git 差异编辑器的上下文中执行这个命令,VS Code 才会把选区转换成暂存区内容。
第三步:执行 Stage Selected Ranges
完成操作后,先不要急着提交,回到 Source Control 侧栏检查可见状态:
- 已选中的范围应进入
Staged Changes,或者让目标文件在该分组下出现。 - 同一个文件仍可能出现在
Changes中。这不是重复文件,而是说明它还有另一部分修改没有暂存。 - 再次点击
Staged Changes下的文件,可以查看“下一次提交将包含什么”;点击Changes下的同名文件,可以查看“仍留在工作区的内容”。

官方文档允许一个文件同时出现在两个列表中:先暂存一组修改,再继续编辑同一文件,就会形成已暂存快照和未暂存快照。这个状态正是“只提交选中的行”成功后的重要信号。
第四步:填写提交信息并提交
- 在 Source Control 视图顶部的提交信息框中,填写能描述已暂存内容的短句,例如“拆分配置读取逻辑”。提交信息应对应已经放入
Staged Changes的部分,不要把尚未暂存的另一组工作也写进描述。 - 点击
Commit。提交完成后,已暂存范围会从待提交列表中消失,并进入本地 Git 历史;未暂存范围仍会留在Changes中。 - 如果还要上传远程仓库,再单独执行
Push或同步操作。提交成功不等于已经推送。
验收时只看两件事:本地提交的差异里包含目标范围,工作区的 Changes 里仍保留未选中的修改。不要用“文件不再出现在 Changes”作为唯一判断,因为一个文件全部暂存时才会离开该分组,部分暂存时它可以同时出现在两个分组。
选错范围时怎样撤回
如果发现暂存范围选错了,在 Staged Changes 中找到文件并执行 Unstage Changes,或者使用文件旁的减号按钮。这样会把内容从暂存区移回 Changes,但不会删除工作区修改。
不要把 Unstage Changes 和 Discard Changes 混用:前者只改变“下一次提交包含什么”,后者会丢弃工作区中的修改。涉及丢弃操作前,先确认内容已经不需要保留。
常见问题
为什么右键菜单里没有 Stage Selected Ranges?
先确认当前文件来自 Git 仓库,并且打开的是 Source Control 的 Changes 差异编辑器。普通编辑器、未识别的 SCM 提供程序或已暂存差异,都可能没有这个上下文菜单;此时可从命令面板搜索 Git: Stage Selected Ranges。
部分暂存后同一个文件出现两次,是不是产生了副本?
不是。它仍是同一个工作区文件,只是 Git 同时展示了两份状态:Staged Changes 是下一次提交的快照,Changes 是暂存之后还留在工作区的改动。
暂存了选中行,后来又修改了同一行怎么办?
再次修改会形成新的未暂存差异。提交前重新查看两个分组;如果新修改也要进入同一提交,就在当前差异中再次选择并执行部分暂存。
Stage 后能直接在远程仓库看到吗?
不能。Stage 只更新本地暂存区,Commit 才写入本地历史,Push 才会把已有提交发送到远程仓库。
最后确认
在 VS Code 中只提交选中的行,固定路径是:Source Control → Changes → 打开 Diff Editor → 选中改动范围 → Stage Selected Ranges → 检查 Staged Changes → Commit。部分暂存完成后,同一文件同时出现在 Changes 和 Staged Changes 是正常状态;确认这一点,再把暂存、提交和推送分别处理,就能把同一文件里的两类修改拆成清晰的提交。
VS Code dev containers 怎样让容器复用宿主机 SSH agent
- 上一篇
- VS Code dev containers 怎样让容器复用宿主机 SSH agent
- 下一篇
- VS Code extensions 扩展宿主高占用时怎样定位扩展
-
- 文章 · 软件教程 | 51分钟前 |
- VS Code port forwarding 怎样限制转发端口的访问范围
- 477浏览 收藏
-
- 文章 · 软件教程 | 55分钟前 |
- VS Code notebooks 怎样固定 notebook 内核选择
- 469浏览 收藏
-
- 文章 · 软件教程 | 59分钟前 |
- VS Code terminal 怎样为不同 shell 设置独立 profile
- 441浏览 收藏
-
- 文章 · 软件教程 | 1小时前 | vs code · 软件教程 · VS Code Search Editor 跨文件搜索 保存搜索条件 工作区搜索
- VS Code Search Editor 怎样保存可复用的跨文件搜索条件
- 238浏览 收藏
-
- 文章 · 软件教程 | 1小时前 |
- VS Code extensions 扩展宿主高占用时怎样定位扩展
- 365浏览 收藏
-
- 文章 · 软件教程 | 1小时前 | ssh · git · vs code · Git VS Code Dev Containers SSH agent
- VS Code dev containers 怎样让容器复用宿主机 SSH agent
- 291浏览 收藏
-
- 文章 · 软件教程 | 1小时前 |
- VS Code 资源管理器怎样关闭紧凑文件夹显示
- 413浏览 收藏
-
- 文章 · 软件教程 | 1小时前 |
- VS Code multi-root 怎样让工作区共享任务配置
- 471浏览 收藏
-
- 文章 · 软件教程 | 1小时前 |
- VS Code Settings Sync 怎样清除云端同步数据后重新开始
- 444浏览 收藏
-
- 文章 · 软件教程 | 1小时前 |
- VS Code Extension Bisect 怎样排查扩展冲突
- 261浏览 收藏
-
- 文章 · 软件教程 | 1天前 |
- WinSCP 怎样只同步远端新增文件
- 499浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- PubMedQA
- 深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
- 661次使用
-
- H2O EvalGPT
- H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
- 681次使用
-
- LMArena
- LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
- 727次使用
-
- HELM
- 深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
- 695次使用
-
- MMBench
- MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
- 528次使用
-
- SSH 连接 Git 报 Permission denied (publickey) 怎么办?一套排查清单
- 2026-06-17 146浏览
-
- Go 编译时怎么写入版本号和 Git 提交信息
- 2026-09-06 358浏览
-
- Go 生成代码提交后 gofmt 仍然显示差异怎么处理
- 2026-09-07 158浏览
-
- 关于前后端分离及初始化配置
- 2023-01-26 109浏览
-
- 从0到1自建一个代码cr diff平台
- 2023-01-27 446浏览

