分支和合并更改
处理 Bicep 代码时,通常需要一次执行多个操作。 例如,以下是使用玩具公司网站的两种场景:
- 网站的开发团队希望在对 Bicep 文件进行重大更改时获得你的帮助。 但是,团队还不希望这些更改生效。 你需要能够对网站当前的实时版本进行微调,同时对新版本进行处理。
- 你正在处理你认为有助于改善网站性能的试验性更改。 不过,这些更改是初步的。 在准备就绪之前,你不想将它们应用到网站的实时版本。
在本单元中,你将了解 Git 分支。
注意
本单元中显示的命令用于说明概念。 请暂时不要运行这些命令。 稍后你将练习在此处学到的知识。
分支是什么?
分支提供了一种获得文件的多个活动副本的方法。 你可以根据需要创建分支并在分支之间进行切换。 处理完分支后,可以将其合并到另一个分支。 或者也可以将其删除,这会删除所有更改。
使用分支来完成所有工作是很常见的。 通常,可以将一个分支指定为表示文件的已知良好或实时版本的主要分支。 按照约定,此分支通常称为主分支。 可以创建任意数量的其他分支。 当分支上的更改准备就绪时,将分支合并到主分支中。
创建和签出分支
在 Git 中创建分支非常简单快捷。 有几种方法可以实现此目的,但最简单的方法通常是使用 git checkout
命令。 下面是如何创建名为“my experimental changes”的新分支的示例:
git checkout -b my-experimental-changes
此命令实际上执行两项操作:创建“my-experimental-changes”分支,以及签出新创建的分支。 签出表示在文件夹中看到的文件副本将反映分支中的内容。 如果有两个分支具有不同的更改集,则签出一个分支,然后签出另一个分支可以在两组更改之间切换。
也可以使用 git checkout
命令切换到现有分支。 在本示例中,你签出了主分支:
git checkout main
注意
通常需要提交更改,然后才能签出其他分支。 如果无法签出,Git 会发出警告。
处理分支
切换到分支后,便可以正常提交文件。 事实上,目前为止所做的一切操作都是在分支上进行的。 你正在使用主分支,这是在创建新存储库时的默认分支。
在签出分支的同时提交某些更改时,该提交将与分支相关联。 切换到其他分支时,在合并分支之前,可能不会在 git log
历史记录中看到该提交。
合并分支
分支是一种将正在进行的工作与当前实时版本的 Bicep 代码分隔开的好方法。 但在完成对分支上的文件进行更改后,你通常希望将更改合并回主分支。
当你在一个分支上工作时,可以使用 git merge
命令将另一个分支的更改合并到当前分支中。
注意
合并之前,请务必签出合并目标分支(通常称为目标分支)。 请记住,你要从另一个分支合并到当前正在运行的分支。
下面是一个示例,演示如何签出主分支,然后将更改从“my-experimental-changes”分支合并到主分支中。 最后,删除“my-experimental-changes”分支,因为你不再需要它。
git checkout main
git merge my-experimental-changes
git branch -d my-experimental-changes
提示
与其他人合作时,通常使用拉取请求合并更改,而不是直接合并分支。 稍后你将了解有关协作和拉取请求的详细信息。
合并冲突
当 Git 将更改从一个分支合并到另一个分支时,它会查看已修改的文件,并尝试将更改合并在一起。 有时,你可能对两个不同的分支的同一代码行进行了更改。 在这些情况下,Git 无法选择哪个是正确的代码版本,因此它将改为创建合并冲突。
本模块中,我们不会深入探讨合并冲突,但了解合并冲突可能发生非常重要。 与他人协作时,这种情况更加常见。 在本模块的总结中,我们提供了一个链接,该链接指向有关 Git 和 Visual Studio Code 如何帮助解决合并冲突的详细信息。
Git 工作流
在本模块中,你只了解到了分支的基础知识。 但是,分支功能非常强大,它能为你的工作方式带来灵活性。 例如,可以从其他分支创建分支,并将分支与任何其他分支合并。 你可以使用分支创建各种不同的工作流,这些工作流能够为你和团队喜欢的工作方式提供支持。
在本模块中,我们使用了一种名为主干开发模型的简单工作流。 在这种工作流中,你具有单一的主干分支。 例如,本文示例中使用 main。 该分支表示代码的已知良好版本。 进行更改或任何工作时,将从该主干中创建分支。
主干开发模型不鼓励直接在主干分支上进行更改。 尝试使其他分支只保留一小段时间,这有助于最大程度地减少合并冲突。 然后,在完成工作时合并并删除这些分支。
团队环境中有一些常见的其他工作流,在这些工作流中可能需要控制发布更改的频率。 在本模块的总结中,我们提供了有关 Git 工作流详细信息的链接。