使用仓库和远程仓库
Git 仓库和远程仓库使您能够通过在不同位置同步工作来与他人协作。VS Code 提供了用于处理远程仓库的集成工具,无需具备 Git 命令行知识。
本文介绍了如何在 VS Code 中处理 Git 仓库和远程仓库,包括克隆、发布、同步更改以及管理多个仓库。
理解远程仓库
远程仓库是托管在其他服务器(如 GitHub、Azure DevOps 或 GitLab)上的 Git 仓库。远程仓库通过提供团队成员共享工作的中心位置来实现协作。
当您克隆一个仓库时,Git 会自动创建一个名为 origin 的远程仓库,指向原始仓库。如果您需要与不同的服务器或仓库交互,可以使用多个远程仓库。
使用远程仓库涉及三个主要操作
-
获取 (Fetch):从远程仓库下载提交而不更改您的工作文件。这让您可以在不将他人的更改合并到您的工作中时查看他们的进度。
-
拉取 (Pull):从远程仓库下载提交并将其合并到您当前的分支。这是一次性完成“获取”和“合并”的操作。
-
推送 (Push):将您的本地提交上传到远程仓库,以便他人可以访问您的更改。

当您推送时,Git 需要知道将提交发送到哪个远程仓库。默认情况下,Git 使用为您当前分支配置的上游分支。如果没有设置上游分支,VS Code 会提示您发布分支并设置上游。
添加远程仓库
要向您的仓库添加新的远程仓库
-
在“源代码控制”视图(⌃⇧G (Windows, Linux Ctrl+Shift+G))中,选择更多操作 (...) > 远程仓库 > 添加远程仓库
或者,从命令面板(⇧⌘P (Windows, Linux Ctrl+Shift+P))运行 Git: Add Remote 命令。
-
输入远程仓库的 URL
-
输入远程仓库的名称(例如
upstream)
现在,您的仓库有了一个额外的远程仓库,您可以从中获取内容或向其推送内容。
使用类似的步骤移除远程仓库 (Git: Remove Remote)。
克隆仓库
克隆会在您的机器上创建远程仓库的本地副本。克隆的仓库包含远程仓库中的所有分支、提交和历史记录。默认情况下,Git 会配置一个名为 origin 的远程仓库,指向您克隆时的 URL。
要克隆仓库,请在命令面板(⇧⌘P (Windows, Linux Ctrl+Shift+P))中运行 Git: Clone 命令,或在“源代码控制”视图中选择克隆仓库按钮。
如果您从 GitHub 克隆,VS Code 会提示您进行 GitHub 身份验证。然后,从列表中选择一个仓库克隆到您的机器。该列表包含公共和私有仓库。对于其他 Git 提供商,请输入仓库 URL。

克隆时,VS Code 会要求您选择一个本地文件夹来存储仓库。克隆完成后,您可以选择在新窗口中打开该仓库。
GitHub Pull Requests and Issues 扩展通过拉取请求和问题管理增强了 GitHub 集成。了解更多关于 在 VS Code 中使用 GitHub 的信息。
发布到 GitHub
如果您有一个未连接到远程仓库的本地仓库,可以直接从 VS Code 将其发布到 GitHub。
要将仓库发布到 GitHub
-
打开“源代码控制”视图
-
在“源代码控制”视图中选择发布到 GitHub
-
如果出现提示,请登录 GitHub
-
选择创建公共仓库还是私有仓库
-
选择要在初始提交中包含的文件
VS Code 将在 GitHub 上创建一个新仓库,将其添加为远程仓库,并推送您的提交。
发布到 GitHub 是让您的本地工作上线的最快方法。它可以在一步操作中完成创建仓库、配置远程仓库和推送提交。
推送、拉取和同步
推送、拉取和同步是将您的本地工作与远程仓库保持同步的核心操作。
推送提交
推送会将您的本地提交上传到远程仓库。要推送提交:
-
在本地提交您的更改
-
在“源代码控制”视图中选择更多操作 (...) > 推送
或者,选择状态栏中的同步图标,一次性执行拉取和推送操作。如果您想推送到特定的远程仓库,请使用推送到...选项。
您也可以通过使用“源代码控制图”视图工具栏中的“推送”图标来推送本地提交。
-
如果出现提示,请登录以进行远程身份验证
您的提交已上传到远程分支。其他团队成员现在可以拉取您的更改。
如果您的分支未配置上游,VS Code 会提示您先发布该分支。
拉取提交
拉取会从远程仓库下载提交并将其合并到您的本地分支。要拉取提交:
-
在“源代码控制”视图中选择更多操作 (...) > 拉取
或者,选择状态栏中的同步图标,一次性执行拉取和推送操作。如果您想从特定的远程仓库拉取,请使用从...拉取选项。
您也可以通过使用“源代码控制图”视图工具栏中的“拉取”图标来拉取远程提交。
-
VS Code 将下载并合并远程提交
如果您的本地更改与远程提交之间存在冲突,VS Code 会通过合并冲突解决工具帮助您处理这些冲突。
使用变基 (Rebase) 拉取
您可以选择在远程更改之上变基您的本地提交,而不是合并它们:
-
在“源代码控制”视图中选择更多操作 (...) > 拉取 (变基)
-
VS Code 会先应用远程提交,然后在其之上重演您的本地提交
变基会创建一条不包含合并提交的线性历史记录。了解更多关于 Git 变基 的信息。
同步更改
同步结合了拉取和推送操作——它首先从远程仓库拉取更改,然后推送您的本地提交。这是保持工作同步的推荐方式。
要同步更改:
- 在“源代码控制”视图中选择同步更改
- 选择状态栏中的同步图标

状态栏同步指示器会显示您需要推送 (↑) 和拉取 (↓) 的提交数量。例如,↑2 ↓1 表示您有 2 个提交需要推送,1 个提交需要拉取。
配置 git.confirmSync 设置,以控制 VS Code 是否在同步前请求确认。
获取提交
获取 (Fetch) 会从远程仓库下载提交,而不将其合并到您的本地分支。这让您可以在集成之前审查传入的更改。
要获取提交:
- 在“源代码控制”视图中选择更多操作 (...) > 获取
- 选择从所有远程仓库获取,以从所有已配置的远程仓库获取更新
- 选择获取 (清理) 以获取更新并移除已删除的远程分支(若要始终清理,请启用 git.pruneOnFetch 设置)
获取后,您可以在“源代码控制图”中查看传入的提交,然后再使用拉取进行合并。
要自动在后台获取提交,请启用 git.autofetch 设置(默认禁用)。要配置获取间隔,请使用 git.autofetchPeriod 设置(默认 180 秒)。
状态栏同步操作
状态栏提供了快速访问常见仓库和远程操作的途径,无需打开“源代码控制”视图。
分支指示器
左下角的分支指示器显示:
- 当前分支名称:选择以切换分支
- 同步状态:需要推送 (↑) 和拉取 (↓) 的提交数量
- 发布状态:对于未发布的分支显示发布分支

状态栏中的同步图标(旋转箭头)使您能够将更改与远程仓库同步(推送和拉取)。
您可以通过以下设置自定义状态栏行为:
- git.showActionButton :控制显示哪个操作按钮(同步或提交)
- git.showPushSuccessNotification :推送成功后显示通知
- git.showCommitInput :在“源代码控制”视图中显示提交输入框
源代码控制图
“源代码控制图”提供了提交历史、分支关系和与远程仓库同步状态的可视化表示。这使得理解传入和传出的更改变得简单。

该图显示:
- 当前分支:用特殊指示器高亮显示
- 上游分支:显示远程仓库中您尚未拉取的提交
- 传入的提交 (↓):远程仓库中您可以拉取的提交
- 传出的提交 (↑):您可以推送的本地提交
- 其他分支:仓库中的本地和远程分支
您可以直接从图表工具栏中执行获取、推送和拉取操作。图表视图还显示传入和传出的更改,使您可以轻松判断何时需要同步。选择图表中的项目以查看该提交中更改的各个文件。
通过以下设置自定义“源代码控制图”:
- scm.graph.showIncomingChanges :显示或隐藏传入的提交
- scm.graph.showOutgoingChanges :显示或隐藏传出的提交
- scm.graph.pageSize :初始加载的提交数量
了解更多关于 使用源代码控制图查看提交历史 的信息。
使用仓库
“仓库”视图使您能够在单个工作区中管理多个 Git 仓库。这在处理跨越多个仓库的项目时非常有用。“仓库”视图还会显示与您的仓库关联的 Git 工作树 (worktrees)。

要显示“仓库”视图,请从命令面板(⇧⌘P (Windows, Linux Ctrl+Shift+P))运行 Source Control: Focus on Repositories View 命令。配置 scm.alwaysShowRepositories 设置,以始终在“源代码控制”视图中显示“仓库”视图。
对于每个仓库,您可以查看活动分支、同步状态,并访问获取、拉取、推送等操作。
当您打开包含 Git 仓库的文件夹时,VS Code 会自动检测它们。如果您打开一个包含多个仓库的文件夹(如 monorepo),所有仓库都会显示在“仓库”视图中。
仓库选择模式
如果您更喜欢一次专注于单个仓库或工作树,可以切换到单仓库模式。在这种模式下,您只会看到所选仓库的更改和图表。在多仓库模式下运行时,“源代码控制”视图会显示所有仓库的更改。使用 scm.repositories.selectionMode 设置可以在多仓库和单仓库模式之间切换。
凭据助手
凭据助手会安全地存储您的身份验证凭据,这样您就不必每次推送或拉取时都输入它们。您应该 设置凭据助手,以避免在每次 VS Code 与远程仓库交互时被要求输入凭据。