在 Visual Studio 中管理 Git 存储库

“Git 存储库”窗口提供了一个全屏 Git 体验,旨在帮助你管理 Git 存储库并随时掌握团队项目的最新动态。 例如,你可能需要重置、还原、挑拣提交或仅清理提交历史记录。 “Git 存储库”窗口也是可视化和管理分支的理想位置。

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

打开“Git 存储库”窗口

要打开“Git 存储库”窗口,请选择“查看”>“Git 存储库”(或按 Ctrl+0、Ctrl+R),或按 Ctrl+Q,然后在“功能”下搜索“Git 存储库”

使用 GitHub Copilot Chat 解释提交

使用 Visual Studio 2022 版本 17.10 预览版 2 及更高版本和 GitHub Copilot 扩展,可以使用 AI 生成详细的提交说明,描述该提交中的更改。 按说明按钮请求 GitHub Copilot 创建提交说明。 若要安装 GitHub Copilot,请参阅在 Visual Studio 中安装和管理 GitHub Copilot

用于请求 GitHub Copilot 创建提交说明的说明按钮的屏幕截图。

更改上次提交(修正)

更新最后一个提交在 Git 中称为修正,这是一个常见的用例。 有时你只需更新提交消息,否则可能需要包含最新的更改。

可以使用以下命令在命令行中修正提交:

git commit --amend

“Git 存储库”窗口可让你轻松更新最近的提交消息。 双击上次提交打开上次提交的提交详细信息,然后选择提交消息旁边的“编辑”选项。

编辑提交消息的屏幕截图。

编辑完提交消息后,选择“修正”。

通过选择“修正”保存已编辑邮件的屏幕截图。

如果需要包含对上次提交的代码更改,可以在“Git 更改”窗口中执行此操作。 选中“修正”复选框,然后提交更改。

使用“Git 更改”窗口修正代码更改的屏幕截图。

要了解有关修改的详细信息,包括如何更改提交消息(最近的提交消息除外)的详细信息,请参阅 Git 网站上的 Git 工具 - 重写历史记录

合并提交 (Squash)

为了合并一系列提交,Git 提供了一个选项来将多个提交 squash 到单个提交中。 当你频繁创建提交并最终获得数量繁多的提交,而你想要在推送到远程存储库之前清理这些提交时,此选项会很有帮助。

你可以使用以下命令在命令行中 Squash 两个提交:

git rebase -i HEAD~2

然后将 pick 更新为 squash、保存和更新提交消息。

将 pick 更新为 Squash 的屏幕截图。

若要在 Visual Studio 中合并提交,请使用 Ctrl 键选择要合并的多个提交。 然后单击右键并选择“Squash 提交”。 Visual Studio 会自动组合你的提交消息,但有时最好是提供更新的消息。 查看并更新提交消息后,选择“Squash”按钮。

Visual Studio 中 Squash 提交的屏幕截图。

若要了解有关 Squash 的详细信息,请参阅 Git 网站上的 Git 工具 - 重写历史记录

合并和变基分支

如果你使用 Git 分支来处理不同的功能,则在某个时候,你需要包含引入到其他分支的更新。 当你仍在处理功能分支时,可能会发生这种情况。 此外,当你已处理功能分支并且需要通过将其添加到另一个分支来保留更改时,也可能会发生这种情况。 在 Git 中,可以通过合并或变基分支来包含这些更新。

注意

以下说明使用 New_Feature 作为功能分支的示例名称。 将其替换为你自己的分支名称。

若要在命令行上将主分支合并到你自己的功能分支中,请使用以下命令:

git checkout New_Feature
git merge main

若要在 Visual Studio 中执行相同操作,请在分支列表中双击功能分支以将其签出。 然后右键单击主分支并选择“将‘主分支’合并到‘New_Feature 分支’”。

Visual Studio 中合并分支的屏幕截图。

若要在命令行上将主分支变基到你自己的功能分支中,请使用以下命令:

git checkout New_Feature
git rebase main

若要在 Visual Studio 中执行相同操作,请在分支列表中双击功能分支以将其签出。 然后右键单击主分支并选择“将‘New_Feature 分支’变基到‘主分支’”。

Visual Studio 中变基分支的屏幕截图。

若要了解有关合并、变基和分支的一般信息,请参阅 Git 网站上的 Git 分支

复制提交(挑拣)

使用挑拣选项将提交从一个分支复制到另一个分支。 与合并或变基不同,挑拣仅引入所选提交中的更改,而不是分支中的所有更改。 挑拣非常适合解决以下常见问题:

  • 意外提交错误分支。 将更改挑拣到正确的分支,然后将原始分支重置为以前的提交。
  • 拉取在功能分支中进行的一组提交,以便更快地将它们合并回主分支。
  • 在不变基分支的情况下,从主分支植入特定提交。

若要使用命令行将更改从提交复制到当前分支,请使用以下命令:

git cherry-pick 7599e530

若要在 Visual Studio 中执行相同操作,请单击选中要从中挑拣提交的分支以预览该分支。 然后右键单击目标提交,选择“挑拣”。

Visual Studio 中的“挑拣”的屏幕截图。

操作完成后,Visual Studio 会显示一条成功消息。 你挑拣的提交将显示在“传出”部分。

若要了解有关挑拣提交的详细信息,请参阅挑拣命令的 Git 网页

还原更改

使用还原命令可撤消推送到共享分支的提交中所做的更改。 还原命令会创建一个新提交,用于撤消对上一个提交所做的更改。 还原命令不会重写存储库历史记录,因此在与他人合作时可以安全地使用它。

若要使用命令行还原在提交中所做的更改,请使用以下命令。 将示例 ID 替换为分支中实际提交的 ID。

git revert 53333305
git commit

在前面的示例中,这些命令将撤消提交 53333305 中所做的更改,并在该分支上创建新的提交。 原始提交仍在 Git 历史记录中。 若要在 Visual Studio 中执行相同操作,请右键单击要还原的提交,然后选择“还原”。 确认操作并完成该操作后,Visual Studio 将显示一条成功消息,并且“传出”部分会显示新提交。

Visual Studio 中的“还原”的屏幕截图。

选择新提交,确认它撤消了对已还原提交的更改。

确认还原操作的屏幕截图。

若要了解有关还原更改的详细信息,请参阅还原命令的 Git 网页

将分支重置为以前的状态

使用重置命令将本地存储库中的分支移回上一个提交的内容。 此操作将放弃自要重置分支的提交以来发生的所有更改。

警告

不要重置共享分支,因为可能会删除其他人的工作。 请改用还原命令。

若要使用命令行将分支重置为先前的状态,请使用以下命令。 将示例 ID 替换为分支中实际提交的 ID。

git reset --hard 53333305

命令的 --hard 部分通知 Git 将文件重置为先前提交的状态,并放弃所有暂存的更改。 若要在 Visual Studio 中执行相同操作,请右键单击要重置分支的提交,然后选择“重置”>“删除更改(--hard)”。

显示在 Visual Studio 中重置分支的屏幕截图。

若要了解有关重置分支的详细信息,请参阅重置命令的 Git 网页