VS Code Source Control 怎样只提交选中的行
来源:17golang原创
时间:2026-10-24 19:55:51 216浏览 收藏
可以。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 是正常状态;确认这一点,再把暂存、提交和推送分别处理,就能把同一文件里的两类修改拆成清晰的提交。
-
146 收藏
-
358 收藏
-
158 收藏
-
109 收藏
-
446 收藏
-
477 收藏
-
469 收藏
-
162 收藏
-
441 收藏
-
238 收藏
-
365 收藏
-
291 收藏
-
413 收藏
-
471 收藏
-
444 收藏
-
261 收藏
-
499 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 485次学习