返回知识库

版本协作 · 版本协作

合并Merge

合并把两条分叉历史接回一条:main 没动就快进;两边都动过就新建带两个父节点的提交;同行冲突要先手工解决。

先认出这两条汇合的线,再判断要不要新建提交

下面就是 git log 图上的汇合口。main 没动就快进;两边改同一段会停下并在文件上标冲突;分叉后则新建一枚带两个父节点的提交。

第 0 步先打开:终端跑 git log --graph --oneline。下面就是 main 和 feature 汇合的那一段。

git log --graph快进 · 0 个新提交

b7c2091main 指针前移到 feature 顶端无新对象 · 只移动指针

main 自分支后未动

feature 线性领先。merge 不新建提交,main 直接走到 b7c2091。

原因:main 没动就可以快进。下一步:看两边改同一段会怎样失败,或看三方合并长什么样。

知识点:接回一条线

轨道上刚出现的三种形态。

  • merge 把两条分叉历史接回一条。
  • main 自分支后没动 → 快进,只移动指针,不新建提交。
  • 两边都动过 → 三方合并,产生带两个父节点的提交。
  • 同行冲突要先手工取舍,删干净标记再 continue;解决结果本身也是一次提交。

什么时候用、怎么用

把功能线合回主线时用 merge,不要在共享 main 上强推。

  • 信号:feature 完成,要合进已同步的 main。
  • 最短路径:checkout main → pull → merge feature → 冲突逐段保留双方意图 → 冒烟测试再推。
  • 不适用:想整理成一条直线且分支只属于你,才考虑 rebase;共享历史不要 --force。

正反例:同一条 feature 合进 main

只改冲突时怎么取舍。

正例保留重试,也保留清空密码

合并提交写清两个父节点。主路径冒烟后再推,两边意图都在。

反例随便点「Accept Current」

清空密码丢了,登录失败又回到没提示。标记没了不等于逻辑对了。

快速自测

feature 基于旧 main,这期间 main 也合进了支付重试。git merge feature 最可能怎样?

继续查证

术语的技术定义和行为以这些一手或权威资料为准。

下一步学

和本知识点经常一起出现的概念。