通过变基应用更改

Azure DevOps Services | Azure DevOps Server 2020 | Azure DevOps Server 2019 | TFS 2018

Visual Studio 2022 |Visual Studio 2019 |Visual Studio 2017 |Visual Studio 2015

Git 通过将每个新提交链接到其前置,自动维护分支上的开发历史记录。 将一个分支 合并 到另一个分支时,历史记录可能变得不那么简单。 例如, 无快进合并 通过创建与多个前置项的合并提交来合并开发线。 相反,Git 存储库 合并了不同开发行,而无需创建合并提交,这会导致更简单的提交历史记录,但丢失了有关合并的信息。 无论是要保留合并记录还是简化提交历史记录,你选择 的合并类型 都可能会受到影响。

本文讨论何时使用 rebase 而不是非快速转发合并,并提供以下任务的过程:

  • 重新设置本地分支的基线
  • 在重新基后强制推送本地分支
  • 交互式重新基以将本地提交挤在一起

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

重新设置本地分支的基线

Git 存储库 将源分支中的提交集成到当前本地分支中, (目标分支) 。 源分支保持不变。 为了比较,Git rebase 和其他合并类型如下图所示。

Diagram showing the before and after commits when using Git rebase.

Git 重新设定目标分支的提交历史记录,使其包含所有源分支提交,后跟自上次通用提交以来的所有目标分支提交。 另一种查看方法是,在源分支历史记录的顶部重播目标分支中的更改。 值得注意的是,Git 重新基会更改现有目标分支提交的顺序,而其他合并策略的情况并非如此。 在上图中,提交 K 包含与 K 相同的更改,但具有新的提交 ID,因为它链接回提交 E 而不是 C。

在重新基地期间,如果源分支更改与目标分支更改冲突,Git 将提示你 解决合并冲突。 可以按照在合并期间解决合并冲突的方式在重新基地期间解决合并冲突。

重新base 与 no-fast-forward 合并

Git 重新基地会导致提交历史记录比 非快速转发 合并更简单但更确切,否则称为 三向真正的 合并。 如果希望在提交历史记录中记录合并,请使用无快速转发合并。

如果你是唯一处理功能或 bugfix 分支的人员,请考虑使用存储库定期将最近的 main 分支工作集成到其中。 该策略有助于确保你随时了解其他人的最新工作,并及时解决出现的任何合并冲突。 通过重新分组,可以在最新 main 分支工作的基础上实现新功能,这有助于维护线性提交历史记录。

有关 Git 存储库及其使用时间的详细信息,请参阅 Rebase vs merge

重新定基和强制推送指南

如果重新设置以前 推送的本地分支,然后再次运行默认的 Git 推送命令,则推送将失败。 默认 Git 推送命令应用快速转发合并,将本地分支集成到远程分支中。 该命令将在重新基后失败,因为重新基会更改本地目标分支中现有提交的顺序,因此它不再与其远程对应项的历史记录匹配。 在此方案中, 强制推送 将通过覆盖远程分支来成功。

Git 存储库和强制推送是功能强大的工具,但在决定是否使用它们时,请记住以下准则:

  • 请勿重新设置推送和与他人共享的本地分支,除非你确定没有人使用共享分支。 重新基地后,本地分支将不再匹配其远程分支的历史记录。
  • 不要强制推送到其他人正在使用的远程分支,因为远程分支的本地版本将不再与更新的远程分支历史记录匹配。
  • 你的团队应就重新基地和强制推送的使用方案达成一致。

提示

对于协作评审过程,请使用 拉取请求 将新工作合并到远程存储库的默认分支中。

如何重新定基

Visual Studio 2019 版本 16.8 及更高版本提供 Git 版本控制体验,同时维护 Team Explorer Git 用户界面。 若要使用团队资源管理器,请从菜单栏中取消选中 ToolsOptionsPreview>>FeaturesNew>Git 用户体验。 可以从任一接口互换使用 Git 功能。 下面,我们提供了有关如何执行 Git 存储库的并行比较。

Visual Studio Git

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

Screenshot of the Manage Branches option in the Git menu of Visual Studio 2019.

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

Screenshot of the Checkout option in the branch context menu in the Git Repository window of Visual Studio 2019.

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

Screenshot of the Rebase option in the branch context menu in the Git Repository window of Visual Studio 2019.

  1. Visual Studio在成功重新基后将显示确认消息。

Screenshot of the rebase confirmation message in the Git Repository window of Visual Studio 2019.

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

Screenshot of the rebase conflict message in the Git Repository window of Visual Studio 2019.

Visual Studio 团队资源管理器

  1. 团队资源管理器中,选择“ 开始 ”,然后选择 “分支”。

Screenshot of the Branches option in Team Explorer in Visual Studio 2019.

  1. “分支 ”视图中,右键单击目标分支并选择 “签出”。

Screenshot of the Checkout option in the Branches view of Team Explorer in Visual Studio 2019.

  1. 右键单击源分支,然后选择“重新基于”。

Screenshot of the Rebase Onto option in the Branches view of Team Explorer in Visual Studio 2019.

  1. 验证重新基选项,然后单击 “重新基”。

Screenshot of the rebase details in the Branches view of Team Explorer in Visual Studio 2019.

  1. Visual Studio在成功重新基后将显示确认消息。

Screenshot of the rebase confirmation message in the Branches view of Team Explorer in Visual Studio 2019.

如果在重新基地期间发生冲突,Visual Studio会通知你。 可以 解决冲突,也可以取消重新基并返回到预重新基状态。

Screenshot of the rebase conflict message in the Branches view of Team Explorer in Visual Studio 2019.

在重新基后强制推送本地分支

如果重新设置以前推送的本地分支,则后续的默认 Git 推送将 失败。 相反,可以强制推送本地分支以覆盖其远程对应项,以便其提交历史记录匹配。

警告

从不强制推送其他人正在处理的分支。 有关详细信息,请参阅 Rebase 和强制推送指南

Visual Studio 2019 版本 16.8 及更高版本提供 Git 版本控制体验,同时维护 Team Explorer Git 用户界面。 若要使用团队资源管理器,请从菜单栏中取消选中 ToolsOptionsPreview>>FeaturesNew>Git 用户体验。 可以从任一接口互换使用 Git 功能。 下面,我们提供了如何强制推送本地分支的并行比较。

提示

若要强制推送Visual Studio,必须先启用强制推送选项:

  1. 在 Git 菜单中,转到 ToolsOptionsSource>>ControlGit>Global 设置
  2. “启用推送 --force-with-lease ”选项设置为 True

Git 推送 --force-with-lease 标志比 --force 标志更安全,因为它不会覆盖一个远程分支,该分支的提交未集成到强制推送的本地分支中。

Visual Studio Git

  1. “Git 更改 ”窗口中,选择推送按钮以推送提交。

Screenshot of the up-arrow push button in the Git Changes window of Visual Studio 2019.

或者,可以从 Git 菜单中选择“推送”。

Screenshot of the Push option from the Git menu in Visual Studio 2019.

  1. 如果默认的 Git 推送操作失败,Visual Studio启动“Git 推送失败”对话框。 选择 强制推送

Screenshot of the Git-push failed dialog in Visual Studio 2019.

  1. Visual Studio成功推送后将显示确认消息。

Screenshot of the push confirmation message in Visual Studio 2019.

Visual Studio 团队资源管理器

  1. 团队资源管理器中,选择“ 开始 ”,然后选择“ 同步 ”以打开 同步 视图。

Screenshot of the Sync option in Team Explorer in Visual Studio 2019.

  1. “同步 ”视图中,选择 “推送 ”以将更改上传到远程存储库。

Screenshot of the Push link in the Synchronization view of Team Explorer in Visual Studio 2019.

  1. 如果默认的 Git 推送操作失败,Visual Studio启动“Git 推送失败”对话框。 选择 强制推送

Screenshot of the Git-Push failed dialog in Visual Studio 2019.

  1. Visual Studio成功推送后将显示确认消息。

Screenshot of the push confirmation message in Team Explorer in Visual Studio 2019.

交互式重新基以将本地提交挤在一起

通常,当你在本地功能分支中处理新功能时,你将创建多个提交。 准备好发布新功能后,可能需要将这些提交合并到单个提交中,以简化提交历史记录。 可以使用交互式存储库将多个提交 入单个提交中。

Visual Studio 2019 不支持交互式重新分组。 请改用 Git 命令行。

注意

Azure DevOps用户可以在拉取请求期间压缩主题分支的提交历史记录。

后续步骤