使用提取、合并和拉取更新代码

Azure DevOps Services |Azure DevOps Server |Azure DevOps Server 2022 |Azure DevOps Server 2020

Visual Studio 2019 |Visual Studio 2022

如果项目有多个参与者,请通过下载并集成其他人上传到项目的远程存储库的工作来更新本地 Git 存储库。 这些 Git 命令更新本地存储库:

  • Git 提取 会下载其他人上传到远程存储库的任何新提交。 本地存储库缓存中的远程跟踪分支会更新 - 本地分支保持不变。
  • Git 合并 将一个或多个源分支的提交集成到目标分支中。
  • Git 存储库 将源分支中的提交集成到目标分支中,但使用与 Git 合并不同的策略。
  • Git 拉取 执行提取,然后执行合并或重新数据库,以将提取的提交集成到当前的本地分支中。

将本地存储库与远程存储库 同步 时,Visual Studio 会使用这些 Git 命令的子集。

有关 Git 工作流的概述,请参阅 Azure Repos Git 教程

本文提供以下任务的过程:

  • 使用提取下载更改
  • 使用合并存储库更新分支
  • 使用拉取下载更改和更新分支

使用提取下载更改

Git 提取下载本地存储库中不存在的远程分支提交和引用的文件对象,并更新本地存储库缓存中的 远程跟踪 分支。 远程跟踪分支是远程分支的本地缓存只读副本,不是本地分支。 Git 提取不会更新本地分支。 例如,如果由 origin 分支 bugfix3 指定的远程存储库,Git 提取将更新命名 origin/bugfix3 的远程跟踪分支,而不是本地 bugfix3 分支。 可以使用远程跟踪分支来:

  • 将远程跟踪分支与本地分支进行比较,以查看提取的更改。
  • 将远程跟踪分支合并到本地分支。
  • 从远程跟踪分支创建新的本地分支。

Visual Studio 2022 通过使用 Git 菜单、Git 更改以及解决方案资源管理器中的上下文菜单提供 Git 版本控制体验。 Visual Studio 2019 版本 16.8 还提供 团队资源管理器 Git 用户界面。 有关详细信息,请参阅 Visual Studio 2019 - 团队资源管理器 选项卡。

  1. “Git 更改 ”窗口中,选择 “提取”。 然后选择 传出/传入 以打开 Git 存储库 窗口。

    Visual Studio 2019 的“Git 更改”窗口中“提取”按钮和传入链接的屏幕截图。

    还可以从 Git 菜单中选择 “提取 ”。

    Visual Studio 2019 的 Git 菜单中“提取”选项的屏幕截图。

  2. “Git 存储库 ”窗口中,提取的提交将显示在 “传入 ”部分中。 选择提取的提交以查看该提交中已更改的文件的列表。 选择已更改的文件以查看已更改内容的差异视图。

    Visual Studio 2019 中 Git 存储库菜单的屏幕截图。

小窍门

提取 不会删除本地存储库缓存中不再具有远程对应项的远程跟踪分支。 若要将 Visual Studio 配置为 Fetch 期间修剪过时的远程跟踪分支,

  • 选择 工具>选项>源代码管理>Git 全局设置
  • 提取过程中的 Prune 远程分支 设置为 True

获取 Git 后,可以将本地分支与其相应的远程跟踪分支进行比较,以查看远程分支上发生的变化。 如果决定使用提取的更改更新当前本地分支,可以执行 Git 合并重新数据库。 或者,可以运行 Git 拉取,它将 Git 提取与 Git 合并或存储库合并在一起。 Git 合并和 Git 存储库都通过将源分支中的提交应用到目标分支来更新目标分支。 但是,Git 合并和 Git 存储库使用不同的策略。 有关详细信息,请参阅 更新包含合并或重新base的分支 ,以及 何时重新定基与合并

使用合并或存储库更新分支

Git 合并和 Git 存储库将源分支中的提交集成到当前本地分支(目标分支)。 Git 合并 执行 快速转发无快进 合并。 no-fast-forward 合并也称为 三向 合并或 真正的 合并。 Git 存储库 是另一种类型的合并。 下图显示了这些合并类型。

显示使用合并和重新数据库时提交前后的示意图。

Git 合并 和 Git 存储库Git 工作流中广泛使用。 处理本地功能或 bugfix 分支时,通常的做法是:

  1. 通过定期main和合并远程提交,使本地分支保持其远程对应项的当前状态。
  2. 使用存储库或合并将本地 main 分支更新集成到本地功能分支。
  3. 通过将工作 推送 到相应的远程分支来备份本地功能分支上的工作。
  4. 在功能完成时,创建 拉取请求 ,将远程功能分支合并到远程 main 分支中。

此方法可帮助你:

  • 了解可能影响工作的其他人员最近的工作。
  • 及时解决你的工作与其他人之间的任何冲突。
  • 在 up-to日期项目内容的基础上应用新功能。
  • 获取对工作的 拉取请求 评审。

Merge

对于 Git 合并,如果目标分支的提示存在于源分支中,则默认合并类型将是快速向前合并。 否则,默认合并类型将是非快速向前合并。

如果目标分支的提示与源分支发生分歧, 则快速转发 Git 无法发生 合并冲突 ,因为 Git 不会应用快速转发合并。 默认情况下,Git 尽可能使用快速转发合并。 例如,Git 将在仅通过从远程对应分支拉取来更新的本地分支上应用快速向前合并。

无快进 Git 合并生成新的目标分支“合并提交”,该分支将源分支更改与目标分支更改集成。 适用的更改是在两个分支共同的最后一次提交之后进行的更改。 在上图中,提交 C 是两个分支中的最后一个常见提交。 如果任何源分支更改都与任何目标分支更改冲突,Git 将提示你解决合并冲突。 合并提交 (L) 包含集成的源分支和目标分支更改。 源和目标分支提示(K 和 E)是合并提交的父级。 在分支的 提交历史记录中,合并提交是合并作的有用标记,并清楚地显示合并了哪些分支。

Git 合并仅修改目标分支 - 源分支保持不变。 遇到一个或多个合并冲突时,必须解决这些问题才能完成合并。 或者,可以取消合并作,并将目标分支返回到其以前的状态。

有关合并选项和策略的详细信息,请参阅 Git 参考手册Git 合并策略

小窍门

如果源分支是远程跟踪分支,则通过在合并之前运行 Git 提取 来确保分支 up-to日期。

  1. 从菜单栏中选择 “Git > 管理分支 ”以打开 “Git 存储库 ”窗口。

    Visual Studio 2019 的 Git 菜单中“管理分支”选项的屏幕截图。

  2. “Git 存储库 ”窗口中,右键单击目标分支并选择 “签出”。

    Visual Studio 2019 的“Git 存储库”窗口中的“签出”选项的屏幕截图。

  3. 右键单击源分支,然后选择“将源分支合并<到>目标分支<>”。

    Visual Studio 2019 的“Git 存储库”窗口中“合并”选项的屏幕截图。

  4. Visual Studio 将在成功合并后显示确认消息。

    Visual Studio 2019 的 Git 存储库窗口中合并确认消息的屏幕截图。

    如果合并因合并冲突而停止,Visual Studio 将通知你。 可以 解决冲突,也可以取消合并并返回到合并前状态。

    Visual Studio 2019 的 Git 存储库窗口中合并冲突消息的屏幕截图。

Rebase

Git 重新设置 目标分支的提交历史记录,使其包含所有源分支提交,后跟自上次通用提交以来的所有目标分支提交。 另一种查看方法是,Git 存储库在源分支历史记录的顶部重播目标分支中的更改。 如果任何源分支更改都与任何目标分支更改冲突,Git 将提示你解决合并冲突。 Git 存储库不会创建合并提交。 值得注意的是,Git 存储库会更改现有目标分支提交的顺序,而其他合并策略则并非如此。 在上 中,提交 K 包含与 K 相同的更改,但具有新的提交 ID,因为它链接回提交 E 而不是 C。

Git 存储库仅修改目标分支 - 源分支保持不变。 遇到一个或多个合并冲突时,必须解决这些冲突才能完成存储库。 或者,可以取消重新数据库作,并将目标分支返回到其以前的状态。

如果你是唯一处理功能或 bugfix 分支的人员,请考虑使用 Git 存储库将新 main 分支提交集成到其中。 否则,请使用 Git 合并。 有关 Git 存储库以及何时使用它的详细信息,请参阅使用 rebase 和 Rebase 与合并应用更改

小窍门

如果源分支是远程跟踪分支,则通过在存储库之前运行 Git 提取 来确保分支 up-to日期。

  1. 选择 “Git > 管理分支 ”以打开 “Git 存储库 ”窗口。

    Visual Studio 2019 的 Git 菜单中“管理分支”选项的屏幕截图。

  2. “Git 存储库 ”窗口中,右键单击目标分支并选择 “签出”。

    Visual Studio 2019 的“Git 存储库”窗口中分支上下文菜单中的“签出”选项的屏幕截图。

  3. 右键单击源分支,然后选择“将目标分支<重新定基>到<源分支>”。

    Visual Studio 2019 的“Git 存储库”窗口中分支上下文菜单中的“存储库”选项的屏幕截图。

  4. 成功重新设置数据库后,Visual Studio 将显示确认消息。

    Visual Studio 2019 的“Git 存储库”窗口中的“存储库”确认消息的屏幕截图。

    如果由于合并冲突而停止了存储库,Visual Studio 会通知你。 可以 解决冲突,也可以取消重新数据库并返回到预重新数据库状态。

    Visual Studio 2019 的“Git 存储库”窗口中的存储库冲突消息的屏幕截图。

使用拉取下载更改和更新分支

默认情况下,Git 拉取将 Git 提取 和 Git 合并合并 ,以便从其远程分支更新当前本地分支。 (可选)Git 拉取可以执行 Git 存储库 而不是 Git 合并。

与 Git 提取不同,从远程存储库下载新提交后,Git 拉取将立即更新当前本地分支。 如果知道想要在 Git 提取后立即更新当前本地分支,请使用 Git 拉取。

小窍门

若要将 Visual Studio 配置为 在拉取时进行重新数据库而不是合并,

  1. 从 Git 菜单中,转到 工具>选项>源代码管理>Git 全局设置
  2. 将拉取选项设置为True
  1. “Git 更改 ”窗口中,选择“ 拉取”。

    Visual Studio 2019 的“Git 更改”窗口中的“拉取”按钮的屏幕截图。

    还可以从 Git 菜单中选择 “拉取 ”。

    Visual Studio 2019 中 Git 菜单中的“拉取”选项的屏幕截图。

  2. 拉取作完成时会显示一条确认消息。

    Visual Studio 2019 的“Git 更改”窗口中拉取确认消息的屏幕截图。

    如果在拉取作的合并部分发生冲突,Visual Studio 将通知你。 可以 解决冲突,也可以取消合并并返回到合并前状态。

    Visual Studio 2019 中 Git 更改窗口中拉取冲突消息的屏幕截图。

注释

在 Visual Studio 中, Sync 执行 “拉取 ”,然后执行 推送 以同步本地和远程分支。 有关 同步的详细信息,请参阅 在 Visual Studio 中使用 git 提取、拉取、推送和同步进行版本控制

后续步骤