git merge
2026/6/9 16:18:53 网站建设 项目流程

文章目录

  • 1.简介
  • 2.格式
  • 3.选项
  • 4. 示例
    • 4.1 基础合并
    • 4.2 禁用快进合并(推荐团队协作)
    • 4.3 只允许快进合并
    • 4.4 压缩合并
    • 4.5 解决冲突
  • 5.注意
    • 5.1 合并策略对比
    • 5.2 查看合并历史
    • 5.3 撤销合并
    • 5.4 常用别名设置
  • 6. 小结
  • 参考文献

1.简介

git merge用于将两个或多个分支的修改合并到一起。通常用于将功能分支(feature)合并回主分支(main)。

合并时,Git 会根据分支的提交历史自动选择合并策略:

  • 快进合并(Fast-forward):当前分支没有新提交,直接将指针向前移动
  • 三方合并(3-Way Merge):两个分支都有新提交,创建一个新的合并提交

2.格式

gitmerge[<options>]<branch>gitmerge(--continue|--abort|--quit)

3.选项

--ff当前分支完全包含了被合并分支的提交时,应如何处理合并。-ff 是允许快进(默认)。 快进(Fast-Forward) 是 Git 合并时的一种特殊情况:当目标分支(如 main)自创建功能分支(如 feature)以来没有产生新的提交时,Git 只需将 main 的指针直接向前移动到 feature 的最新提交,就像“顺着链条快进”一样,不创建新的合并提交,历史变成一条直线。 --no-ff 禁用快进合并,强制创建合并提交 --ff-only 只允许快进合并,否则报错。--squash压缩合并,将多个提交合并为一个变更(不创建合并提交)--abort中止当前有冲突的合并--quit就地停止:忘记当前合并,不再继续。但保留工作区和暂存区的所有修改(包括冲突和已解决的内容)--continue解决冲突后继续合并-m<msg>为合并提交指定消息 --no-commit 合并但不自动提交(用于进一步调整)--stat显示差异统计,即修改了多少个文件,多少行插入,多少行删除。默认行为 -n, --no-stat 不显示差异统计

4. 示例

4.1 基础合并

# 切换到目标分支gitswitch main# 将 feature 分支合并到 maingitmerge feature

4.2 禁用快进合并(推荐团队协作)

# 强制创建合并提交,保留分支历史gitmerge --no-ff feature-m"merge feature: 添加用户登录功能"

4.3 只允许快进合并

# 如果不能快进则报错(常用于拉取上游更新)gitmerge --ff-only origin/main

只允许快进合并的核心使用场景是:当你明确知道当前分支没有新提交,只是想“追上”上游分支的最新代码时,用它来防止意外创建合并提交。

4.4 压缩合并

假设分支历史如下:

main: A---B---C \ feature: D---E---F

普通合并:

gitswitch maingitmerge feature

结果:

main: A---B---C---------M \ / feature: D---E---F
  • M 是合并提交,有两个父提交(C 和 F)
  • feature 的所有提交(D、E、F)都保留在历史中

优点:完整保留分支历史
缺点:历史中会包含大量零碎提交(如 fix typo、update 等)

使用 --squash 合并:

gitswitch main# 将 feature 的所有提交压缩成一个变更gitmerge--squashfeaturegitcommit-m"feat: 添加用户登录功能"

结果:

main: A---B---C---S feature: D---E---F
  • S 是普通提交,不是合并提交
  • feature 的所有变更被压缩成一个提交 S
  • feature 分支的 D、E、F 提交不会进入 main 历史

优点:主分支历史保持线性、整洁
缺点:丢失 feature 分支的详细开发历史

一图看懂:

判断是否使用--squash选项最根本的标准是,待合并分支上的历史记录是否有意义。如果没有意义,建议使用--squash选项将其废弃。

4.5 解决冲突

# 尝试合并时出现冲突gitmerge feature# CONFLICT in main.go# 手动解决冲突后gitadd.gitmerge--continue# 或放弃合并gitmerge--abort

5.注意

5.1 合并策略对比

场景命令效果
默认合并(可快进)git merge feature直接移动指针,无合并提交
默认合并(不可快进)git merge feature自动创建合并提交
强制创建合并提交git merge --no-ff feature总是创建合并提交,保留分支历史
只允许快进git merge --ff-only feature不能快进时报错
压缩合并git merge --squash feature将所有提交压缩为一个变更

5.2 查看合并历史

# 查看分支图(直观展示合并关系)gitlog--oneline--graph--all# 查看哪些分支已合并到当前分支gitbranch--merged# 查看哪些分支尚未合并到当前分支gitbranch --no-merged

5.3 撤销合并

# 撤销最近一次合并(假设还没推送)gitreset--hardHEAD~1# 如果已推送,使用 revert(保留历史)gitrevert-m1HEAD

5.4 常用别名设置

gitconfig--globalalias.mnf"merge --no-ff"gitconfig--globalalias.mffo"merge --ff-only"# 使用别名gitmf featuregitmffo origin/main

6. 小结

需求命令说明
普通合并git checkout main && git merge feature默认行为
强制创建合并提交git merge --no-ff feature保留分支历史,推荐团队协作
只允许快进git merge --ff-only upstream/main避免意外合并提交
压缩合并git merge --squash feature保持主干历史整洁
中止冲突合并git merge --abort安全退出冲突状态
解决冲突后继续git add . && git merge --continue继续合并

一句话总结git merge用于将不同分支的工作整合到一起。推荐团队协作使用--no-ff保留分支历史;遇到冲突时用--abort安全退出;合并前先用git branch --merged确认分支状态。


参考文献

Git - git-merge Documentation

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询