登录
推荐 文章 Go 技术 课程 下载 专题 AI
首页 >  文章 >  软件教程

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 找到待处理文件

  1. 先保存文件,然后点击左侧 Activity Bar 的 Source Control 图标;也可以使用默认快捷键 Ctrl+Shift+G(macOS 为 Control+Shift+G)打开源代码管理视图。
  2. 在侧栏的 Changes 分组中找到目标文件。这里列出的是尚未暂存的修改,文件旁的状态标记通常能提示它是新增、修改还是删除。
  3. 点击目标文件名称,打开 Diff Editor。不要直接在普通编辑器里选一段文本后就提交,因为普通编辑器的选择不会自动变成暂存范围。
原创 VS Code 风格界面说明图,展示从源代码管理的 Changes 打开 Diff Editor 并选中目标改动范围
图1:从 Source Control 打开 Diff Editor 并选中目标改动范围的原创操作示意图,不是实际软件截图。

进入 Diff Editor 后,左侧是基准内容,右侧是当前工作区改动。部分暂存时主要操作右侧的变更区域:选中一段完整改动,准备让这段内容进入下一次提交。

第二步:在 Diff Editor 中选中要提交的行

  1. 在右侧改动区域按住鼠标拖选需要提交的连续行。选区应覆盖完整的逻辑改动,例如一组函数修改或一段配置调整;不要把一行的缩进和另一组无关改动混在同一选区中。
  2. 把鼠标移动到选区附近的 Diff Editor gutter。VS Code 会显示与当前范围对应的暂存操作;如果暂存按钮没有出现,先确认你打开的是 Changes 下的未暂存差异,而不是 Staged Changes 下的已暂存差异。
  3. 需要用菜单操作时,在选区上点击右键,选择 Stage Selected Ranges。也可以打开命令面板(Ctrl+Shift+P,macOS 为 Command+Shift+P),运行 Git: Stage Selected Ranges。

这里的“Selected Ranges”是差异范围,不是任意文本复制选区。只有在 Git 差异编辑器的上下文中执行这个命令,VS Code 才会把选区转换成暂存区内容。

第三步:执行 Stage Selected Ranges

完成操作后,先不要急着提交,回到 Source Control 侧栏检查可见状态:

  1. 已选中的范围应进入 Staged Changes,或者让目标文件在该分组下出现。
  2. 同一个文件仍可能出现在 Changes 中。这不是重复文件,而是说明它还有另一部分修改没有暂存。
  3. 再次点击 Staged Changes 下的文件,可以查看“下一次提交将包含什么”;点击 Changes 下的同名文件,可以查看“仍留在工作区的内容”。
原创 VS Code 风格界面说明图,展示同一文件同时出现在 Changes 和 Staged Changes 的部分暂存状态
图2:部分暂存后的双列表验收状态说明图,同一文件的两份改动快照分别保留;不是实际软件截图。

官方文档允许一个文件同时出现在两个列表中:先暂存一组修改,再继续编辑同一文件,就会形成已暂存快照和未暂存快照。这个状态正是“只提交选中的行”成功后的重要信号。

第四步:填写提交信息并提交

  1. 在 Source Control 视图顶部的提交信息框中,填写能描述已暂存内容的短句,例如“拆分配置读取逻辑”。提交信息应对应已经放入 Staged Changes 的部分,不要把尚未暂存的另一组工作也写进描述。
  2. 点击 Commit。提交完成后,已暂存范围会从待提交列表中消失,并进入本地 Git 历史;未暂存范围仍会留在 Changes 中。
  3. 如果还要上传远程仓库,再单独执行 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 是正常状态;确认这一点,再把暂存、提交和推送分别处理,就能把同一文件里的两类修改拆成清晰的提交。

声明:本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>