张芷铭的个人博客

Merge 创建合并提交记录历史;Rebase 重写历史形成线性记录。理解三路合并算法与重演机制是掌握 Git 协作的关键。

Merge:三路合并算法

流程

  1. 找到两个分支的最近共同祖先
  2. 计算两个分支各自的差异
  3. 合并差异,处理冲突
  4. 创建合并提交(两个父提交)

分支图变化

1
2
3
4
5
6
7
8
9
# 合并前
A---B---C (master)
     \
      D---E---F (feature)

# 合并后(在 feature 执行 merge master)
A---B---C (master)
     \         \
      D---E---F---M (feature)

Rebase:重演机制

流程

  1. 找到共同祖先,提取独有提交
  2. 暂存差异
  3. 重置分支指针到目标分支
  4. 重新应用提交,生成新提交 ID

分支图变化

1
2
3
4
# rebase 后(在 feature 执行 rebase master)
      A---B---C (master)
               \
                D'---E'---F' (feature)

核心差异

方面MergeRebase
合并提交会创建不会
冲突处理一次性解决每个提交都需解决
历史记录分叉,真实线性,简洁
安全性更安全有风险

黄金法则

  • 公共分支:使用 merge,记录合并事件
  • 本地/特性分支:使用 rebase,整理提交历史
  • 禁止:对已推送的公共分支执行 rebase

Comments