Visual Studio 如何使用 Git 简化版本控制

你是否曾经希望恢复到旧版本的能正常运行的代码? 你是否将代码副本手动存储在不同位置作为备份? 版本控制就是答案。

Git 是使用极广泛的新式版本控制系统。 使用 Git,可以跟踪一段时间内对代码所做的更改,并且可以还原到特定版本。 因此,无论你是专业开发人员还是正在学习代码编写,Visual Studio 的 Git 体验都非常有用。

提示

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

从 Visual Studio 中的 Git 和 GitHub 开始

使用 Git 可以轻松地通过 Visual Studio 进行版本控制。 我们将在你所在的位置继续。 你可以与所选的 Git 提供程序远程协作,例如 GitHub 或 Azure DevOps。 或者,你也可以在本地工作,而不使用任何提供程序。

要开始将 Git 与 Visual Studio 结合使用:

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

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

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

如果你是刚刚接触 Git,可访问 https://git-scm.com/ 网站开始了解。

Screenshot of the Create a Git Repository dialog box in Visual Studio.

解决方案资源管理器中的的视图文件

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

直观的内部循环工作流

对于日常 Git 工作流,Visual Studio 提供了一种在编码时与 Git 交互的无缝方式,而无需切换代码。

可以通过分支执行多项任务并试验代码。 如果你或团队同时处理多个功能,或者你想探索想法而不影响工作代码,那么分支会非常有用。 建议的 Git 工作流为你处理的每个功能或修补程序使用一个新的分支。 了解如何从 Visual Studio 创建分支

创建新的分支并切换到新分支后,可以通过更改现有文件或添加新文件,然后将工作提交到存储库以开始工作。 要详细了解如何在 Visual Studio 中进行提交并进一步了解 Git 中的文件状态,请参阅进行提交页面。

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

如果在团队中工作,或者使用不同的计算机,则还需要不断地在远程存储库上提取和拉取新的更改。 要了解有关在 Visual Studio 中管理 Git 网络操作的详细信息,请参阅提取、拉取、推送和同步页面。

The Visual Studio IDE with the Git menu and the Git Changes tab in Solution Explorer showing.

存储库管理和协作

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

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

The Visual Studio IDE that highlights the Git menu and the Git Changes tab in Solution Explorer.

浏览和管理 Git 存储库

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

处理合并冲突

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

个性化设置 Git 设置

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

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

  2. 选择所需的选项

    Screenshot of the Options dialog box where you can choose personalization and customization settings in Visual Studio IDE.

性能和工作效率增强

当涉及到 Visual Studio 中的集成 Git 工具时,我们将继续专注于性能和工作效率增强。 下面是一些值得注意的更新:

  • 提交图。 在 Visual Studio 2022 版本 17.2 中,我们引入了提交图功能,以帮助减少查看 Git 存储库或分支历史记录时可能会遇到的延迟。 有关详细信息,请参阅提升 Git 体验博客文章。

  • 分支切换。 此外,在 Visual Studio 2022 版本 17.2 中,我们需要重新加载解决方案的分支交换机数量预估减少了 80%。 若要了解详细信息,请参阅性能增强:Git 分支切换博客文章。

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 存储库 。

注意

16.8 版本起,Visual Studio 2019 包含完全集成的 GitHub 帐户体验。 你现在可以将 GitHub 和 GitHub Enterprise 帐户都添加到密钥链中。 你可以添加并使用这些帐户,就像使用 Microsoft 帐户一样,也就是说,你将能够更轻松地跨 Visual Studio 访问 GitHub 资源。 有关详细信息,请参阅在 Visual Studio 中使用 GitHub 帐户页面。

提示

如果没有 GitHub 帐户,则可以先按照创建 GitHub 帐户以用于 Visual Studio 页面中概述的步骤操作。

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

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

The Create a Git Repository dialog box in Visual Studio.

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

提示

无论存储库是公用的还是专用的,即使你不与团队合作,也应将代码的远程备份安全地存储在 GitHub 上。 这也使得无论使用哪台计算机,你都可以使用你的代码。

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

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

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

The Clone a Git Repository dialog box in Visual Studio.

如果不知道存储库 URL,则可以利用 Visual Studio 轻松浏览到现有的 GitHub 或 Azure DevOps 存储库,然后再进行克隆。

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

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

在这里,你可以快速访问 Git 存储库并在其之间快速切换。

The Local Repositories option from the Git menu in Visual Studio

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

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

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

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

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

Solution Explorer with the Switch Views button selected in Visual Studio.

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

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

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

  • 未修改的文件:自上次提交以来,这些文件未更改。
  • 已修改的文件:自上次提交以来,这些文件已更改,但尚未被暂存以用于下一次提交。
  • 已暂存的文件:这些文件已更改并将添加到下一次提交中。

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

The Git Changes window in Visual Studio.

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

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

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

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

The line-by-line comparison of file versions in Visual Studio

提示

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

在 Visual Studio 2019 中选择现有分支

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

The current branches that you can view by using the selector at the top of the Git Changes selector in Visual Studio

当前分支也显示在 Visual Studio IDE 右下角的状态栏中。

The current branches that you can view by using the status bar at the bottom-right corner in the Visual Studio IDE

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

在 Visual Studio 2019 中新建一个分支

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

创建新分支非常简单,只需输入分支名称并将其基于现有分支。

The Create a New Branch dialog box in 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 更改”窗口在分支下拉箭头下有一个指示器,其中显示了远程分支的未拉取提交数。 该指示器还显示未推送的本地提交数。

The Git Changes window that shows the indicator drop-down UI element in Visual Studio

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

The Git Repository window that shows the commit history of a branch in Visual Studio

Visual Studio 2019 中的提交详细信息

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

The Commit Details dialog box in Visual Studio

在 Visual Studio 2019 中处理合并冲突

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

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

The 'Merge completed with conflicts' message in Visual Studio

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

The 'Merge in progress with conflicts' message in Visual Studio

但是,如果没有打开这些窗口,而是转到具有合并冲突的文件,则无需搜索以下文本:

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

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

Screenshot of 'File contains merge conflicts' message in Visual Studio

Visual Studio 2019 中的“合并编辑器”

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

The Merge Editor in Visual Studio

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

在 Visual Studio 2019 中个性化 Git 设置

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

The Options dialog box where you can choose personalization and customization settings in Visual Studio IDE.

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

版本 16.8 开始,新的 Git 体验是 Visual Studio 2019 中的默认版本控制系统。 但是,可以在需要时将它关闭。 转到“工具”>“选项”>“环境”>“预览功能”,然后切换“新的 Git 用户体验”复选框,这会使你切换回用于 Git 的团队资源管理器。

The Preview Features section of the Options dialog box in Visual Studio