暂存和提交更改
创建有重点且描述清晰的提交有助于您和您的团队理解代码库的历史。VS Code 提供集成的 Git 工具,用于暂存更改和创建提交,并支持对要包含的更改进行细粒度控制。
本文档介绍了 VS Code 中的暂存和提交工作流,从 Git 的两步流程到使用 AI 辅助生成提交消息以及在提交前审查更改。
Git 工作流
Git 使用一个两步过程来保存您的工作:暂存和提交。当您修改文件时,Git 会跟踪这些更改,但不会自动将它们包含在您的下一个提交中。暂存允许您选择要包含在每个提交中的更改。
将暂存视为准备工作快照。您可以一次暂存所有更改以进行全面的提交,也可以暂存特定文件甚至单个行,以创建更专注、逻辑性更强的提交,以便以后更容易查看和理解。
查看更改
源代码管理视图(⌃⇧G (Windows, Linux Ctrl+Shift+G))是管理 Git 存储库中更改的中心枢纽。更改根据其暂存状态分为两个部分
- 更改:列出所有已修改、添加或删除但尚未暂存以供提交的文件
- 暂存的更改:列出已暂存并准备好提交的文件

请注意,已更改的文件旁边会列出一个“U”(未跟踪)、“M”(已修改)或“D”(已删除)图标,以指示更改的类型。此更改指示器也会显示在“资源管理器”视图和已修改文件的编辑器选项卡标题中。
活动栏中的源代码管理图标还会显示一个带有受影响文件数量的徽章,让您快速了解未提交的更改。
您可以按平铺或树状结构查看更改列表。在源代码管理视图工具栏中,通过 **更多操作**(**...**)> **查看和排序** > **以树状/列表视图显示** 选项来切换此视图。
编辑器标尺指示器
为了帮助您快速识别文件中的更改,VS Code 会在编辑器中行号旁边显示标尺指示器,以表示自上次提交以来添加、修改或删除的行。您也可以在 小地图 中看到这些指示器。
标尺颜色指示更改类型
- 绿色条:自上次提交以来添加的新行
- 蓝色条:自上次提交以来修改的行
- 红色三角形:已删除的行(显示在删除点上方)
选择标尺指示器时,将出现更改的内联 diff 预览。您可以使用相应的按钮直接从此预览中暂存或还原更改。

您可以使用以下设置自定义标尺指示器行为
- scm.diffDecorations:控制 diff 装饰何时出现(全部、标尺、概览、小地图或无)
- scm.diffDecorationsGutterAction:控制标尺菜单中可用的操作
- scm.diffDecorationsGutterPattern:自定义用于标尺装饰的模式
- scm.diffDecorationsGutterVisibility:控制何时显示标尺装饰(始终或悬停时)
- scm.diffDecorationsGutterWidth:设置标尺指示器的宽度
- scm.diffDecorationsIgnoreTrimWhitespace:忽略 diff 装饰中的空白字符更改
暂存更改
暂存更改可为将它们添加到下一个提交做准备。您可以暂存整个文件或特定行和代码块,以获得更精细粒度的控制。
要暂存单个文件,请将鼠标悬停在“**更改**”列表中的文件上,然后选择“**+**”(加号)图标,或右键单击文件并选择“**暂存更改**”。您也可以将文件从“**更改**”部分拖放到“**暂存的更改**”部分进行暂存。

当您使用树状视图时,可以通过暂存整个文件夹来暂存它们。要一次性暂存所有已修改的文件,请将鼠标悬停在“**更改**”标题上,然后选择“**+**”(加号)图标。
在命令面板(⇧⌘P (Windows, Linux Ctrl+Shift+P))中有更多专门的暂存操作。键入“Git: Stage”可查看暂存文件的选项。
暂存特定行或代码块
除了暂存整个文件外,您还可以暂存文件的特定部分。部分暂存可让您创建更专注的提交。例如,如果您在同一文件中进行了格式更改和 bug 修复,则可以单独提交它们,并附带适当的提交消息。
您可以从 diff 编辑器执行部分暂存
-
在“**更改**”列表中选择一个文件以打开 diff 编辑器
-
选择要暂存的行
-
使用 diff 编辑器标尺旁边的“**暂存**”按钮仅暂存选定的行

您也可以右键单击选定区域,选择“**暂存选定范围**”或从命令面板运行“**Git: 暂存选定范围**”。
取消暂存更改
要从暂存中删除文件,请将鼠标悬停在“**暂存的更改**”列表中的文件上,然后选择“-”(减号)图标,或右键单击并选择“**取消暂存更改**”。文件将移回到“**更改**”部分,而不会丢失您的修改。

同样,您也可以使用标尺旁边的“**取消暂存**”按钮,从 diff 编辑器中取消暂存特定行或代码块。
提交您的更改
暂存更改后,您可以创建提交以将其保存到本地存储库。要创建提交,您需要编写一个描述更改的提交消息。此消息可以帮助您和他人理解提交时的提交历史的用途。
编写提交消息
提交消息描述您正在提交的更改,并帮助他人(以及您未来的自己)理解提交的目的。在源代码管理视图顶部的提交消息输入框中键入您的消息,然后选择“**提交**”以保存您的暂存更改。
为了帮助您编写提交消息,请选择提交消息输入框中的闪光图标 ,使用 AI 根据您的暂存更改生成消息。您可以 创建自定义指令 来指导 AI 生成消息。

如果您想编写多段提交消息,可以使用完整的编辑器而不是输入框。通过 git.useEditorAsCommitInput 设置启用此功能。当您在没有提交消息的情况下提交更改时,将打开一个新的编辑器选项卡供您编写消息。
要循环浏览之前的提交消息,请在聚焦于提交消息输入框时,按下 ↑ (Windows, Linux Up) 和 ↓ (Windows, Linux Down)。
提交更改
选择源代码管理视图中的“**提交**”按钮,以提交“**暂存的更改**”部分中的更改。任何未暂存的更改将保留在“**更改**”部分中,供将来提交。
要一次性提交所有更改(暂存和未暂存),请选择“**更多操作**”(**...**)菜单,然后选择“**提交**”>“**提交全部**”。这将一步完成所有已修改文件的暂存和提交。
修改上一次提交
如果您需要修改最近一次提交,可以修改它而不是创建新提交。这对于添加遗漏的更改或更正提交消息非常有用。
要修改提交,请选择“**提交**”按钮下拉菜单,然后选择“**提交(修改)**”,或使用“**更多操作**”(**...**)菜单中的“**提交暂存(修改)**”选项。
仅修改尚未推送到共享存储库的提交。修改已推送的提交会重写历史记录,并可能给其他协作者带来问题。
撤销上次提交
如果您需要撤销上次提交,请在源代码管理视图中选择“**更多操作**”(**...**)菜单,然后选择“**提交**”>“**撤销上次提交**”。这将从您的分支历史记录中删除上次提交,但会将该提交中的所有更改保留在“**暂存的更改**”部分中。
放弃更改
要完全放弃未提交的更改并将文件恢复到上次提交的状态,请在源代码管理视图中右键单击文件,然后选择“**放弃更改**”。或者,将鼠标悬停在“**更改**”列表中的文件上,然后选择放弃图标(一个指向左的弧形箭头)。
放弃的更改将被移至“回收站”(Windows)或“废纸篓”(macOS/Linux),让您有机会在需要时恢复它们。
使用 diff 编辑器查看更改
diff 编辑器显示了文件中的更改内容。它会并排显示原始版本和修改版本的比较。diff 编辑器可以并排视图或内联视图打开。
要打开 diff 编辑器,请在源代码管理视图的“**更改**”或“**暂存的更改**”列表中选择任何文件,以查看该文件相对于上次提交版本的更改。
对于大型文件,通过选择 diff 编辑器工具栏中的“**折叠未更改区域**”按钮来折叠未更改的部分。这有助于您专注于实际的更改。您还可以使用“**下一个更改**”和“**上一个更改**”按钮快速在更改之间导航。
并排视图与内联视图
默认情况下,diff 编辑器会显示一个并排比较,左侧为原始文件,右侧为您的更改。

通过在 diff 编辑器工具栏中选择“**更多操作**”(**...**)>“**内联视图**”切换到内联视图,以便在一个编辑器中查看更改。

使用 diffEditor.renderSideBySide 设置配置您首选的默认视图。
从 diff 编辑器暂存和还原
diff 编辑器在每个更改旁边包含一个带有“**暂存**”和“**还原**”按钮的标尺。这些按钮允许您
- 直接从 diff 视图暂存单个代码块或行
- 还原特定更改而不影响其他修改
如果您在 diff 编辑器中选择了特定行,按钮将仅对您的选择生效。
您可以使用 diffEditor.renderGutterMenu 设置隐藏 diff 编辑器标尺。
辅助功能 diff 查看器
对于屏幕阅读器用户,VS Code 提供辅助功能 diff 查看器,它以统一的 patch 格式显示更改。要打开辅助功能 diff 查看器,请使用 diff 编辑器工具栏中的“**更多操作**”(**...**)菜单,然后选择“**打开辅助功能 diff 查看器**”或使用 F7 键盘快捷键。
使用 **转到下一个差异**(F7)和 **转到上一个差异**()命令在更改之间导航。
使用 AI 查看代码更改
VS Code 使您能够在提交之前使用 AI 辅助来查看未提交的更改。这些 AI 功能是对手动代码审查的补充,有助于在开发工作流的早期捕获问题。
执行 AI 驱动的代码审查以查看未提交的更改
-
在源代码管理视图中选择“**代码审查**”按钮

-
VS Code 分析您的更改,并生成审查评论和建议,这些评论和建议将显示为编辑器中的叠加注释

Git blame 信息
VS Code 可以在编辑器和状态栏中内联显示 git blame 信息。将鼠标悬停在状态栏项或编辑器内联提示上可查看详细的 git blame 信息。
要启用或禁用 git blame 信息,请使用 **Git: 切换 Git Blame 编辑器装饰** 和 **Git: 切换 Git Blame 状态栏项** 命令,或配置这些设置
您可以使用 git.blame.editorDecoration.template 和 git.blame.statusBarItem.template 设置来自定义在编辑器和状态栏中显示的消息格式。您可以使用变量来表示最常见的信息。
例如,以下模板显示了提交的主题、作者姓名以及相对于当前时间的作者日期
{
"git.blame.editorDecoration.template": "${subject}, ${authorName} (${authorDateAgo})"
}
要调整编辑器装饰的颜色,请使用 git.blame.editorDecorationForeground 主题颜色。
提交历史图谱视图
源代码管理视图中的源代码管理图提供了一个可视化表示,展示您的提交历史和分支关系。当您配置了远程存储库时,可以看到您相对于远程存储库的超前或落后提交数量。
该图包含当前分支、当前分支的上游分支以及可选的基分支。图的根是这些分支的共同祖先。

该图提供以下功能
- 选择一个条目以查看该提交中已更改的文件。选择“**打开更改**”操作以在编辑器中查看该提交的 diff。
- 右键单击提交以执行签出、变基、将其作为上下文添加到聊天等操作。
- 选择一个文件以在编辑器中查看该文件的 diff。
- 通过右键单击提交并选择“**与...比较**”、“**与远程比较**”或“**与合并基线比较**”来选择一个提交并将其与另一个分支或标签进行比较。
使用图谱视图工具栏中的操作来选择分支、获取、拉取、推送和同步更改。
文件历史时间线视图
时间线视图位于文件资源管理器底部,是一个统一的视图,用于可视化文件的事件历史。例如,您可以在时间线视图中查看 Git 提交或本地文件保存。

了解有关 时间线视图 的更多信息。
后续步骤
- 分支和工作树 - 了解分支管理、Git 工作树和 stash 操作
- 存储库和远程 - 了解克隆、发布和与远程存储库同步
- 合并冲突 - 处理合并分支时的冲突
- 使用 GitHub - 了解如何使用拉取请求和问题
- VS Code 中的 Copilot - 发现更多由 AI 驱动的开发功能