Git 合并策略选项和示例
一项工作已完成、经过测试并准备好合并回开发主行时,您的团队需要做出一些政策选择。您的合并策略选项有哪些?在本文中,我们将研究各种可能性,然后提供一些有关 Atlassian 运行方式的注释。希望最后您有工具来决定哪种方法最适合您的团队。
Git 合并策略
合并两个分支时会发生合并。Git 将获取两个(或更多)提交指针,并尝试在它们之间找到一个共同的基础提交。Git 有几种不同的方法来查找基本提交,这些方法被称为"合并策略"。一旦 Git 找到通用基础提交,它将创建一个新的“合并提交”,该提交组合了指定合并提交的变更。从技术上讲,合并提交是一种常规提交,恰好有两个父项提交。
除非明确指定,否则 git merge
会自动选择合并策略。可以向 git merge
和 git pull
命令传递一个 -s
(策略)选项。-s
选项可以附加所需合并策略的名称。如果没有明确指定,Git 将根据提供的分支选择最合适的合并策略。以下是可用合并策略的列表。
相关资料
高级 Git 日志
查看解决方案
了解 Bitbucket Cloud 的 Git
递归
git merge -s recursive branch1 branch2
这在两个标题上起作用。递归是拉取或合并一个分支时的默认合并策略。此外,这可以检测和处理涉及重命名的合并,但目前无法使用检测到的副本。这是拉取或合并一个分支时的默认合并策略。
解决
git merge -s resolve branch1 branch2
这只能使用三向合并算法解决两个标题。它试图仔细检测纵横交错的合并歧义,通常被认为是安全且快速的。
Octopus
git merge -s octopus branch1 branch2 branch3 branchN
两个以上标题的默认合并策略。当多个分支传递时,octopus 会自动启动。如果合并有需要手动解决的冲突,octopus 将拒绝合并尝试。它主要用于将相似的功能分支标题捆绑在一起。
我们的策略
git merge -s ours branch1 branch2 branchN
我们的策略在 N 个分支上运行。输出合并结果始终是当前分支 HEAD
的合并结果。“我们的策略”术语意味着偏好实际上忽略了所有其他分支的所有变更。它旨在用于合并相似功能分支的历史记录。
子树
git merge -s subtree branchA branchB
这是递归策略的扩展。合并 A 和 B 时,如果 B 是 A 的子子树,则首先更新 B 以反映 A 的树结构,还会对 A 和 B 之间共享的公共祖先树进行此更新。
Git 合并策略的类型
显式合并
显式合并是默认的合并类型。“显式”部分是他们创建了新的合并提交。这会改变提交历史记录并明确显示合并是在哪里执行的。合并提交的内容也很明确,因为它显示了哪些提交是合并提交的父项提交。有些团队避免显式合并,因为可以说,合并提交会给项目历史增添“干扰”。
通过变基或快进合并进行隐式合并
合并时压缩,通常不进行显式合并
递归 Git 合并策略选项
上面介绍的“递归”策略有自己的附加操作选项子集。
ours
不要与我们的合并策略混淆。这个选项的冲突需要通过优先选择“我们的”版本来完全自动解决。如果来自其他方面的变更没有冲突,则会自动合并。
theirs
与“我们的”策略相反,在解决冲突方面,其他选择倾向于使用外来合并树。
patience
此选项会花费额外的时间来避免在不重要的匹配行上进行错误合并。当要合并的分支差异极大时,最好使用此选项。
diff-algorithim
ignore-*
ignore-space-change
ignore-all-space
ignore-space-at-eol
ignore-cr-at-eol
一组以空格字符为目标的选项。任何与传递的选项的子集相匹配的行都将被忽略。
renormalize
此选项在解析三向合并的同时,在所有 git 树上运行签出和签入操作。此选项旨在用于合并具有不同 checkin
/checkout
状态的分支。
no-normalize
禁用重新规范化选项。这将覆盖 merge.renormalize
配置变量。
no-renames
此选项将在合并期间忽略重命名的文件。
find-renames=n
这是默认行为,递归合并将支持文件重命名。n
参数可用于传递重命名相似度的阈值。默认 n
值为 100%
。
subtree
此选项借鉴了“子树”策略。如果策略在两棵树上运行并修改如何使它们与共享祖先相匹配,则此选项改为对树的路径元数据进行操作以使它们匹配。
我们的 Git 合并政策
Atlassian 强烈偏向使用显式合并。原因很简单:显式合并提供了很好的可追溯性,并为要合并的功能提供了背景信息。绝对鼓励在共享功能分支进行审核之前重新整理本地历史记录,但这根本不会改变政策,反而会增强政策。
分享此文章
下一主题
推荐阅读
将这些资源加入书签,以了解 DevOps 团队的类型,或获取 Atlassian 关于 DevOps 的持续更新。