“Git 更改”窗口提供了在编码时与 Git 交互的无缝方式,而无需切换代码。 但是,有时更有必要专注于 Git 存储库。 例如,你可能需要了解团队一直在处理什么,或者比较两个提交以调查 bug。
你可以与所选的 Git 提供程序(如 GitHub 或 Azure DevOps)远程协作。
浏览本地和远程分支
若要开始,请在“视图”菜单上选择“Git 存储库”打开“Git 存储库”窗口(或使用 Ctrl0、++R 键盘快捷方式)。 还可以通过在“Git 更改”窗口和状态栏上选择传出/传入链接来访问 Git 存储库窗口。
Git 存储库窗口包含左窗格。 你在那里选择的内容会决定右侧显示的内容。
在 Visual Studio 中,左窗格包括 Branches / Tags 和 Pull Requests。
Git 存储库窗口包含三个主要部分,如前面的屏幕截图中所述:
分支/标记:Git 使用户能够通过分支执行多任务并试验其代码。 Git 中的分支在多种方案中非常有用,尤其是在处理具有多个功能的复杂项目或与团队协作时。 使用 Visual Studio 17.13 及更高版本,可以在存储库中看到标记,并导航到任何标记。 团队可以使用 git 标记(例如 v1.0),标记存储库历史记录中的点,并在历史记录中查看存储库的状态。 请参阅 Git - 标记。
图:本部分直观显示分支的状态。 它有三个子节:
- 传入:显示团队一直在参与的传入提交。
- 传出:显示你尚未推送的本地提交。
- 本地历史记录:显示本地存储库跟踪的其余提交。
提交:若要打开此部分,请在 Graph 节中选择任何提交。 可通过选择提交引入的更改来检查这些更改,这会显示差异。 例如,上一个屏幕截图显示了由一个提交引入 Resize.cs 文件的更改。
分支/标记:Git 使用户能够通过分支执行多任务并试验其代码。 Git 中的分支在多种方案中非常有用,尤其是在处理具有多个功能的复杂项目或与团队协作时。 可以在存储库中看到标记,并导航到任何标记。 团队可以使用 git 标记(例如 v1.0),标记存储库历史记录中的点,并在历史记录中查看存储库的状态。 请参阅 Git - 标记。
选择 “分支/标记 ”后,右侧会显示 Graph 和 “提交 ”部分。
图:本部分直观显示分支的状态。 它有三个子节:
- 传入:显示团队一直在参与的传入提交。
- 传出:显示你尚未推送的本地提交。
- 本地历史记录:显示本地存储库跟踪的其余提交。
提交:若要打开此部分,请在 Graph 节中选择任何提交。 可通过选择提交引入的更改来检查这些更改,这会显示差异。 例如,上一个屏幕截图显示了由一个提交引入 Resize.cs 文件的更改。
详细查看提交
通过 Alt+向上键或 Alt+向下键键盘快捷方式,可以在左侧面板中的各节之间跳转。
无需切换分支即可浏览任何本地或远程分支。 找到要关注的提交时,请选择“ 在新建选项卡中打开” 按钮以在不同的选项卡上打开提交。
拉取请求
如果要查看分支和提交,请切换到左侧面板中的 “拉取请求 ”。
“ 拉取请求 ”部分显示活动拉取请求的列表。
浏览并打开拉取请求
选择任意拉取请求即可打开嵌入式审查视图,而无需签出该分支。 可通过 Git 存储库 窗口(视图>Git 存储库)、Git 更改,或 Git>GitHub(或 Azure DevOps)>查看拉取请求 找到拉取请求。
- 拉取请求说明、更改的文件、提交、相关项和审阅者尽在同一视图中。
- 在活动拉取请求之间切换,而不会中断工作分支。
- 在拉取请求中查看单个提交的提交详细信息和更改。
评论和讨论
直接在差异视图中提供反馈,无需切换到浏览器即可继续对话。
- 在特定行中添加内联注释、回复批注和解决线程。
- 在 “更改” 列表中查看每个文件的注释指示器。
- 在批注中呈现内联图像和格式化文本,类似于 Web 体验。
批准、完成和合并
准备好后,请在 Visual Studio 中批准并完成该拉取请求。 投票和完成操作可从多个视图中获取,因此你可以在查看更改时批准。
- 批准拉取请求。 Azure DevOps的下拉列表中提供了更多投票选项。
- 在“概述”选项卡上查看状态检查、合并冲突和所需的审批。
- 完成或合并拉取请求,并可选择将其转换为草稿、放弃或关闭。
可以在 工具>选项>预览功能中管理此体验:
- 拉取请求评论
- 查看 Git 存储库的拉取请求
有关在文件中和差异视图中对拉取请求添加评论的详细操作流程,请参阅 在 Visual Studio 中创建拉取请求。
多分支历史记录视图
版本 17.7 的新增功能:当你打开 Git Repo 窗口时,会从单分支视图开始。 然后,可以选择任何分支以将分支及其提交添加到多分支历史记录视图,从而添加视觉提示,以便更高效地与多个分支交互。
“本地历史记录”视图左侧有线条着色和分支标签,有助于更轻松地跟踪属于每个分支的提交。 可以使用表顶部的分支列表更轻松地在分支之间滚动,并立即知道图形中显示的分支。
在“分支/标签”部分,将鼠标悬停在分支上以显示切换历史记录中的分支按钮(该图标看起来像一只眼睛)。 通过使用悬停按钮,可以选择提交历史记录视图中要显示的分支。
可以使用提交历史记录视图顶部的工具栏按钮自定义视图并筛选分支。
仅显示第一个父级:将历史记录限制为仅显示为单行,而不是显示侧分支的提交序列。
显示本地分支:切换是否在历史记录视图中显示本地分支的标签。
显示远程分支:切换是否显示为正在查看的提交历史记录做出贡献的远程分支的标签。
显示标记:切换是否显示标记的标签。
显示本地分支、 显示远程分支和 显示标记 都引用历史记录视图中左侧显示的提交时标签指示器。
版本 17.14 的新增功能:若要专注于未同步的提交,可以使用 “显示传出/仅传入 ”工具栏按钮将历史记录视图更改为仅显示传出提交(尚未从当前分支推送)和传入提交(远程新增)。
还可以通过右键单击历史记录视图中的任意位置,在上下文菜单上选择“ 仅显示传出/传入 ”。
比较提交
若要比较分支中的任何两个提交,请使用 Ctrl 键选择要比较的两个提交。 然后,右键单击其中一个提交,再选择“比较提交”。
小窍门
与 提交详细信息类似,可以使用“ 在新选项卡中打开” 按钮打开其他选项卡上的比较,或在屏幕上将其最大化。
使用更改摘要查看提交范围
在 Git>View 分支历史记录中,打开任何提交并选择 “打开更改摘要”。 Visual Studio 会在一个统一视图中显示多个文件的已更改行,这对于在按文件逐一进行更深入审查之前先快速浏览一遍非常有用。
根据提交创建分支
在 Visual Studio 中,可以使用 Git 存储库窗口中的“Git Graph”窗格从以前的提交创建分支。 为此,请右键单击要从中创建新分支的提交,然后选择新建分支。
注释
此操作的等效命令是 git branch <branchname> [<commit-id>]。
比较分支
比较分支概述了两个分支之间的差异,这在创建拉取请求、合并甚至删除分支之前非常有用。
若要使用 Visual Studio 将当前签出分支与其他分支进行比较,可以使用状态栏中托管的分支选取器和 Git 更改工具窗口来选择要与之比较的任何本地或远程分支。 右键单击要定位的分支,然后选择“ 与 Current Branch 进行比较”。 或者,可以使用 Git 存储库窗口中的分支列表来访问相同的命令。
选择“与当前分支比较”将打开比较分支体验,你可在其中导航浏览更改列表并选择想要比较的文件。
小窍门
如果更喜欢内联差异,可使用“差异配置选项”齿轮图标并切换到内联差异视图。
签出提交
签出提交在很多方面都是有益的。 例如,它允许返回到存储库历史记录中的上一点,可在其中运行或测试代码。 如果想要从远程分支(例如同事的分支)查看代码,它也非常有用。 这样,如果不打算参与本地分支,则无需创建本地分支。 在这种情况下,只需签出你想要查看的远程分支的提示即可。
若要在 Visual Studio 中签出以前的提交,请打开 “Git 存储库” 窗口,右键单击要返回的提交,然后选择 签出(–detach)。 Visual Studio 显示一个确认对话框,其中说明签出提交后,你将处于 HEAD 分离状态。 这意味着存储库的 HEAD 将直接指向提交而不是分支。
现在,你处于 HEAD 分离状态,可随意运行和测试代码,甚至浏览和提交更改。 浏览完毕并想要返回分支时,可选择通过签出现有分支来放弃更改,或者选择通过先创建新分支来保留更改。
重要
在 HEAD 分离状态中创建的提交与任何分支都不关联,在签出分支后,Git 可能会对其进行垃圾回收。 这就是保留更改的原因,建议在签出分支之前创建新分支。 例如,如果我们签出 Main 而不创建新分支,则提交 C5 和 C6 将被垃圾回收。
若要详细了解分离头状态,请参阅 分离头 Git 文档。
如果想要快速查看拉取请求并评估最新更新,签出远程分支的提示会很有帮助。 若要在 Visual Studio 中执行此作,请先确保从远程存储库提取和获取最新更新。 然后右键单击要查看的远程分支,再选择“签出提示提交”。
使用 Git Blame 查看逐行更改历史记录
Git Blame 显示上次修改文件中每行代码的人员,以及更改的时间和原因。 当需要了解特定代码更改背后的历史记录和上下文、跟踪 bug 的来源或标识特定实现的作者时,此功能非常有用。
查看 Git Blame 标注
可以直接从代码编辑器或解决方案资源管理器查看 Git Blame 注释。
在代码编辑器中:
- 在编辑器中打开文件。
- 右键单击代码编辑器中的任意位置。
- 选择 Git>“归责(标注)”。
From 解决方案资源管理器:
- 右键单击解决方案资源管理器中的文件。
- 选择 Git>“归责(标注)”。
指责批注显示在编辑器的左边距中,显示作者名称、提交日期和提交链接。 该文件在编辑器中打开,并显示 Blame 注释。
从 Blame 注释中查看提交详情
当编辑器中显示 Blame 批注后,您可以与之交互以获取更多信息:
- 单击 提交以查看 详细信息:可以查看完整的提交,可在其中查看该提交中更改的所有文件并访问其他选项,例如将当前版本与以前的版本进行比较。
小窍门
Git Blame 最有助于了解意外行为或跟踪特定更改的原因。
当 Git Blame 不可用时
Git Blame 仅适用于已提交到 Git 存储库的跟踪文件。 如果未显示 Git>Blame 选项,请查看下表,了解常见原因和解决方案。
| 情景 | 解决方案 |
|---|---|
| 文件未被跟踪 | 查看 “Git 更改” 窗口。 如果文件出现在“未跟踪的文件”下,请先将其暂存并提交。 |
| 文件位于 .gitignore 中 | 从 .gitignore中删除该文件,将其添加到存储库,然后提交。 |
| 二进制文件 | 追溯功能仅适用于文本文件,例如源代码(.cs、.js、.py)、配置文件(.json、.xml)和文档(.md、.txt)。 对于二进制文件(.dll, .exe图像),请改用 Git>视图历史记录 。 |
| 无提交历史记录 | 至少进行一次提交,并将该文件包含在内。 |
| 分离的 HEAD 状态 | 检查状态栏。 如果已分离,请从 Git 存储库 窗口中签出分支。 请参阅 检出提交。 |
| 非常大的文件 | 出于性能考虑,对于极大的文件,可能会禁用 Blame 功能。 请改用 Git>查看历史记录。 |
适用于所有方案的替代方案: 右键单击该文件,然后选择 “Git>视图历史记录 ”以查看修改文件的所有提交。
相关内容
- 在 Visual Studio 中管理 Git 存储库
- Visual Studio 中的 Git 体验