关于 Visual Studio 中的 Git

Visual Studio 提供了一个用户界面,用于 Git,这是一个广泛使用的新式版本控制系统。 无论源代码是托管在 GitHub 存储库、Azure DevOps 还是另一个 Git 提供程序中,都可以在 Visual Studio IDE 中执行所有常见版本控制任务。 或者,您可以在没有任何提供商的情况下本地工作,并在准备连接到提供商时选择备份您的源代码。

使用的源代码不必使用 Visual Studio 创建。 无论是否有 Visual Studio 项目文件,都可以在任何 Git 存储库中使用任何源文件夹。

从 Visual Studio 中的 Git 和 GitHub 开始

开始将 Git 与 Visual Studio 配合使用:

  • 如果在 Git 提供程序(如 GitHub)上托管了 Git 存储库,请将存储库克隆到本地计算机。

  • 否则,可以轻松地 创建一个新的 Git 存储库,并添加您的代码。 如果还没有 Git 提供程序,建议从 GitHub 开始,因为 Visual Studio 中的 Git 体验已针对此提供程序进行优化。 GitHub 提供免费且安全的云代码存储,可在其中存储代码并从任何设备随时随地访问它。

不仅可以将 GitHub 和 GitHub Enterprise 帐户添加到你的密钥链,还可以像 Microsoft 帐户一样利用它们。 如果没有 GitHub 帐户,请按照以下步骤 创建 GitHub 帐户,以便立即与 Visual Studio 一起使用。

Visual Studio 中“创建 Git 存储库”对话框的屏幕截图。

如果要在命令行中使用 git 命令,还应安装 Git for Windows(而不是Microsoft产品)。

在解决方案资源管理器中查看文件

克隆存储库或打开本地存储库时,Visual Studio 会切换到 Git 上下文。 解决方案资源管理器在 Git 存储库的根目录中加载文件夹,并扫描目录树中是否有任何可查看的文件,例如 CMakeLists.txt 或具有 .sln 文件扩展名的文件。 有关详细信息,请参阅在解决方案资源管理器中查看文件

分支和远程存储库

可以使用分支使相关更改与你正在处理的不相关的更改分开。 建议的 Git 工作流为你处理的每个功能或修补程序使用一个新的分支。 了解如何从 Visual Studio 创建分支

创建新分支并切换到该分支后,可以开始工作,方法是更改现有文件或添加新文件,然后将工作提交到存储库。 若要详细了解如何在 Visual Studio 中提交并更好地了解 Git 中的文件状态,请参阅 提交 页。

Git 是分布式版本控制系统,这意味着到目前为止所做的所有更改都是仅限本地的更改。 要将这些更改提交到远程存储库,必须将这些本地提交推送到远程存储库

如果在团队中工作,或者使用的是其他计算机,则可能需要提取和拉取远程存储库上的新更改。 若要详细了解如何在 Visual Studio 中管理 Git 网络操作,请参阅 提取、拉取、推送和同步 页。

Visual Studio IDE,其中显示了“Git”菜单和解决方案资源管理器中的“Git 更改”选项卡。

存储库管理和协作

但是,有时更有必要专注于 Git 存储库。 例如,你可能需要了解清楚团队正在处理的内容,或者从其他分支复制提交,或只是清理传出的提交。 Visual Studio 包括功能强大的 存储库浏览 和协作功能,无需使用其他工具。

为了帮助你专注于 Git 存储库,Visual Studio 有一个 Git 存储库 窗口,该窗口是存储库中所有详细信息的合并视图,包括本地和远程分支和提交历史记录。 可以直接从菜单栏上的 Git视图 或状态栏访问此窗口。

突出显示“解决方案资源管理器”中的“Git”菜单和“Git 更改”选项卡的 Visual Studio IDE。

浏览和管理 Git 存储库

若要详细了解如何使用 Visual Studio 中的“Git 存储库”窗口浏览和管理 Git 存储库,请参阅以下页面:

处理合并冲突

如果两个开发人员修改了文件中的相同行,并且 Git 不会自动知道哪一行是正确的,则合并期间可能会发生冲突。 Git 会停止合并,并通知你处于冲突状态。 在 解决合并冲突 页中了解详细信息。

个性化 Git 设置

若要在存储库级别和全局级别个性化 Git 设置,请执行以下操作:

  1. 转到菜单栏上的 Git>设置,或 工具>选项>源代码管理>Git 全局设置

  2. 选择所需的选项

    “选项”对话框的屏幕截图,可在 Visual Studio IDE 中选择个性化设置和自定义设置。

工作效率增强

在 Visual Studio 2022 版本 17.12中,可以选择任何代码部分,然后右键单击,展开 Git 子菜单,然后选择 复制 GitHub Permalink(或 复制 AzureDevOps Permalink)以生成 GitHub Permalink 或 Azure DevOps Permalink 并将其复制到剪贴板。 从那里,你可以将其粘贴到可以使用链接的任何位置,在浏览器中或通过电子邮件、聊天会话和文档共享它。 还可以在 Git 存储库 窗口中的嵌入式提交详细信息视图中执行相同的操作。 使用此功能,无需切换分支即可引用先前提交中的特定代码。 必须使用 Git 托管提供程序、GitHub 或 Azure DevOps 的帐户登录到 Visual Studio

在 Visual Studio 2022 版本 17.6中,可以 搜索 并将其 链接 到 GitHub 问题和 Azure DevOps 工作项。 请参阅 Git 功能以提高工作效率 博客文章。

Git 现在是 Visual Studio 2019中的默认版本控制体验。 自版本16.6以来,我们一直在根据您的反馈构建和完善功能集。 在 版本 16.8中,它成为每个人的默认版本控制体验。

备注

我们还将继续在 Visual Studio 2022中构建和迭代 Git 功能集。 若要了解最新功能更新的详细信息,请参阅 Visual Studio 中的多存储库支持博客文章。

详细了解 Git

Git 是最常用的新式版本控制系统,因此,无论你是专业开发人员,还是学习如何编写代码,Git 都非常有用。 如果你不熟悉 Git,https://git-scm.com/ 网站是一个很好的起点。 在那里,你将找到备忘单、热门在线书籍和 Git 基本信息视频。

从 Visual Studio 2019 中的 Git 开始

我们将指导你了解如何在 Visual Studio 中使用新的 Git 体验,但如果你希望先快速浏览一下,请查看以下视频:

视频长度:5.27 分钟

可通过三种方法开始将 Git 与 Visual Studio 配合使用,提高工作效率:

  • 创建新的 Git 存储库。 如果已有未与 Git 关联的代码,可以首先创建新的 Git 存储库。
  • 克隆现有 Git 存储库。 如果想要处理的代码不在计算机上,则可以克隆任何现有的远程存储库。
  • 打开现有 Git 存储库。 如果代码已在计算机上,则可以使用 文件>>打开项目/解决方案(或 文件夹)打开它,Visual Studio 会自动检测它是否具有初始化的 Git 存储库。

备注

从 Visual Studio 2019 版本 16.8开始,我们提供了完全集成的 GitHub 帐户体验。 现在可以将 GitHub 和 GitHub Enterprise 帐户添加到密钥链。 可以像使用 Microsoft 帐户一样添加和利用它们,这意味着你可以更轻松地跨 Visual Studio 访问 GitHub 资源。 有关详细信息,请参阅在 Visual Studio 中使用 GitHub 帐户页面。

提示

如果没有 GitHub 帐户,可以按照 “创建 GitHub 帐户以用于 Visual Studio”页中所述的步骤开始。

在 Visual Studio 2019 中创建新的 Git 存储库

如果代码未与 Git 关联,可以从创建新的 Git 存储库开始。 为此,请从菜单栏中选择 Git>创建 Git 存储库。 然后,在 创建 Git 存储库 对话框中,输入信息。

Visual Studio 中的“创建 Git 存储库”对话框。

“创建 Git 存储库” 对话框可以轻松地将新存储库推送到 GitHub。 默认情况下,新存储库是专用的,这意味着你是唯一可以访问它的人。 如果取消选中此框,存储库将公开,这意味着 GitHub 上的任何人都可以查看它。

提示

无论存储库是公共的还是专用的,最好在 GitHub 上安全地存储代码的远程备份,即使你未与团队合作。 这也使代码可供你使用,无论使用哪种计算机。

可以选择使用“仅本地”选项 创建仅限本地的 Git 存储库。 或者,可以使用 现有远程 选项将本地项目链接到 Azure DevOps 或任何其他 Git 提供程序上的现有空远程存储库。

在 Visual Studio 2019 中克隆现有 Git 存储库

Visual Studio 包含简单的克隆体验。 如果知道要克隆的存储库的 URL,则可以将 URL 粘贴到 存储库位置 部分,然后选择要克隆到的磁盘位置。

Visual Studio 中的“克隆 Git 存储库”对话框。

如果不知道存储库 URL,Visual Studio 可以轻松浏览并克隆现有的 GitHub 或 Azure DevOps 存储库。

在 Visual Studio 2019 中打开现有的本地存储库

克隆存储库或创建存储库后,Visual Studio 会检测 Git 存储库并将其添加到 Git 菜单中 本地存储库 列表中。

在这里,可以快速访问和切换 Git 存储库。

Visual Studio Git 菜单中的“本地存储库”选项

在 Visual Studio 2019 的解决方案资源管理器中查看文件

克隆存储库或打开本地存储库时,Visual Studio 通过保存并关闭以前打开的任何解决方案和项目,切换到该 Git 上下文。 解决方案资源管理器在 Git 存储库的根目录中加载文件夹,并扫描目录树中是否有任何可查看的文件。 其中包括 CMakeLists.txt 或扩展名为.sln的文件。

Visual Studio 根据解决方案资源管理器中加载的文件调整其视图:

  • 如果克隆包含单个 .sln 文件的存储库,解决方案资源管理器会直接为你加载该解决方案。
  • 如果解决方案资源管理器未检测到存储库中的任何 .sln 文件,则默认情况下会加载文件夹视图。
  • 如果存储库有多个 .sln 文件,则解决方案资源管理器会显示可供选择的可用视图列表。

可以使用解决方案资源管理器工具栏中的 切换视图 按钮在当前打开的视图和视图列表之间切换。

Visual Studio 中选中“切换视图”按钮的解决方案资源管理器。

有关详细信息,请参阅打开存储库中的项目教程的解决方案资源管理器中的视图文件部分。

Visual Studio 2019 中的“Git 更改”窗口

Git 在工作时跟踪存储库中的文件更改,并将存储库中的文件分为三个类别。 这些更改相当于在命令行中输入 git status 命令时会看到的内容:

  • 未修改的文件:这些文件自上次提交以来未更改。
  • 修改的文件:这些文件自上次提交以来已有更改,但你尚未将它们暂存到下次提交。
  • 暂存文件:这些文件包含将在下一次提交中添加的更改。

当你执行操作时,Visual Studio 会在“Git 更改”窗口的“更改”部分中跟踪对项目的文件更改

Visual Studio 中的“Git 更改”窗口。

准备暂存更改时,请单击要暂存的每个文件上的“+”(加号)按钮,或右键单击文件,然后选择“暂存”。 还可以使用“更改”部分顶部的暂存全部 +(加号)按钮,一键暂存所有已修改的文件

暂存更改时,Visual Studio 将创建“已暂存的更改”部分。 只有“已暂存的更改”部分的更改会添加到下一次提交中,可以通过选择“提交暂存内容”来执行此操作。 此操作的等效命令是 git commit -m "Your commit message"。 还可单击“–”(减号)按钮来取消暂存更改。 此操作的等效命令是 git reset <file_path>(用于取消暂存一个文件)或 git reset <directory_path>(用于取消暂存目录中的所有文件)。

还可以通过跳过暂存区域来选择不暂存已修改的文件。 在这种情况下,Visual Studio 允许直接提交更改,而无需暂存更改。 只需输入提交消息,然后选择“全部提交”。 此操作的等效命令是 git commit -a

借助 Visual Studio,还可以通过一键使用 “全部提交并推送”“全部提交并同步” 快捷方式来轻松提交和同步。 双击“更改”和“已暂存的更改”部分中的任何文件时,可以看到与该文件的未修改版本的逐行比较

Visual Studio 中文件版本的逐行比较

提示

如果连接到 Azure DevOps 存储库,则可以使用“#”字符将 Azure DevOps 工作项与提交相关联。 可以通过 团队资源管理器>管理连接来连接 Azure DevOps 存储库。

在 Visual Studio 2019 中选择现有分支

Visual Studio 会在“Git 更改”窗口顶部的选择器中显示当前分支

可以使用 Visual Studio 中“Git 更改”选择器顶部的选择器来查看的当前分支

当前分支也可以在 Visual Studio IDE 右下角的状态栏中使用。

你可以通过使用 Visual Studio IDE 右下角状态栏查看的当前分支

从这两个位置,可以在现有分支之间切换。

在 Visual Studio 2019 中创建新分支

还可以创建新的分支。 此操作的等效命令为 git checkout -b <branchname>

创建新分支与输入分支名称并将其基于现有分支一样简单。

Visual Studio 中的“创建新分支”对话框

可以选择现有的本地或远程分支作为基础。 “签出分支”复选框会自动切换到新创建的分支。 此操作的等效命令是 git checkout -b <new-branch><existing-branch>

Visual Studio 2019 中的 Git 存储库窗口

Visual Studio 有一个新的 Git 存储库 窗口,它是存储库中所有详细信息(包括所有分支、远程和提交历史记录)的合并视图。 可以直接从菜单栏或状态栏上的 Git视图 访问此窗口。

在 Visual Studio 2019 中管理分支

Git 菜单中选择 管理分支 时,会在 Git 存储库 窗口中看到分支树视图。 在左侧窗格中,可以使用右键单击上下文菜单来签出分支、创建新的分支、合并、变基、挑拣等。 单击分支时,可以在右窗格中查看其提交历史记录的预览。

Visual Studio 2019 中的传入和传出提交

提取分支时,“Git 更改”窗口在分支下拉箭头下有一个指示器,其中显示了远程分支的未拉取提交数。 该指示器还显示未推送的本地提交数。

Visual Studio 中显示指示器下拉 UI 元素的“Git 更改”窗口 中的指示器下拉 UI 元素

该指示器还充当链接,用于将你带到 Git 存储库 窗口中该分支的提交历史记录。 历史记录的顶部现在会显示这些传入和传出提交的详细信息。 你还可以在这里决定拉取或推送提交。

显示 Visual Studio 中分支的提交历史记录的“Git 存储库”窗口

Visual Studio 2019 中的提交详细信息

双击 提交时,Visual Studio 会在单独的工具窗口中打开其详细信息。 在这里,可以还原提交、重置提交、修改提交消息或创建提交标记。 在提交中单击已更改的文件时,Visual Studio 将打开该提交及其父级的并排差异视图

Visual Studio 中的“提交详细信息”对话框

在 Visual Studio 2019 中处理合并冲突

如果两个开发人员修改了文件中的相同行,并且 Git 不会自动知道哪一行是正确的,则合并期间可能会发生冲突。 Git 会停止合并,并通知你处于冲突状态。

使用 Visual Studio 可以轻松识别和解决合并冲突。 首先,Git 存储库 窗口显示窗口顶部的黄金信息栏。

在 Visual Studio 中出现的“合并已完成但有冲突”消息

“Git 更改”窗口还会显示“合并正在进行,但存在冲突”消息,而未合并的文件位于其下方的单独部分中

Visual Studio 中“合并正在进行,但存在冲突”消息 中的“正在合并并发生冲突”消息

但是,如果两个窗口都没有打开,而是转到包含合并冲突的文件,则无需搜索以下文本:

    <<<<<<< HEAD
    =======
    >>>>>>> main

相反,Visual Studio 会在页面顶部显示一个黄金信息栏,指示打开的文件存在冲突。 然后,可以单击链接以打开“合并编辑器”

Visual Studio屏幕截图

Visual Studio 2019 中的合并编辑器

Visual Studio 中的合并编辑器是一种三向合并工具,用于显示传入的更改、当前更改和合并结果。 您可以使用 合并编辑器 顶层的工具栏,在文件中的冲突和自动合并的差异之间进行导航。

Visual Studio 中的合并编辑器

还可以使用切换来显示/隐藏差异、显示/隐藏单词差异以及自定义布局。 每侧的顶部都有复选框,你可从任何一侧通过这些复选框来执行所有更改。 但是,若要进行单个更改,可以单击两侧冲突行左侧的复选框。 最后,完成冲突解决后,可以在合并编辑器中选择 接受合并 按钮。 然后,编写提交消息并提交更改以完成解决方案。

在 Visual Studio 2019 中个性化 Git 设置

若要在存储库级别和全局级别个性化和自定义 Git 设置,请转到菜单栏上的 Git>设置,或 工具>选项>源代码管理 菜单栏上。 然后,选择您想要的 选项

“选项”对话框,可在 Visual Studio IDE 中选择个性化设置和自定义设置。

如何在 Visual Studio 2019 中使用完整的团队资源管理器体验

新的 Git 体验是 Visual Studio 2019 中从 版本 16.8 开始的默认版本控制系统。 但是,如果想要将其关闭,可以。 转到 工具>选项>环境>预览功能,然后切换 新的 Git 用户体验 复选框,该复选框将切换回适用于 Git 的团队资源管理器。

Visual Studio 中“选项”对话框的“预览功能”部分

后续步骤

提示

若要了解如何在 Visual Studio 中使用 Git 和 GitHub,请注册 Git 学习系列