当前位置: 首页 > article >正文

Git的三种合并方式

在 Gitee(码云)中合并分支主要有三种方式:​普通合并(Merge Commit)、压缩合并(Squash Merge)​变基合并(Rebase Merge)​。每种方式适用于不同的场景,各有优缺点。以下是详细对比:


1. 普通合并(Merge Commit)​

特点
  • 保留完整历史​:生成一个新的合并提交(Merge Commit),包含两个分支的所有提交记录。
  • 非破坏性操作​:不会修改原有提交历史。
  • 分支关系清晰​:在提交历史中会显示分叉和合并的路径。
适用场景
  • 需要保留完整开发过程(如多人协作时的分支合并)。
  • 合并长期存在的功能分支到主分支(如 devmaster)。
操作步骤
  1. 在 Gitee 的 Pull Request 页面,选择 ​​“普通合并”​
  2. 确认后会自动生成一个类似 Merge branch 'feature' into 'master' 的提交。
优缺点
优点缺点
历史完整可追溯提交历史可能冗长
操作简单安全频繁合并会导致提交树复杂,呈现出非线性的结构尤其是在同时合并多个分支的情况下

2. 压缩合并(Squash Merge)​

特点
  • 压缩提交记录​:将分支上的所有提交合并为一个全新提交,丢弃原分支的独立提交历史。
  • 简化历史​:主分支(如 master)的提交记录保持线性、干净。
适用场景
  • 合并短期功能分支(如修复 Bug 的小分支)。
  • 分支提交较多但无需保留中间过程(如临时实验性代码)。
操作步骤
  1. 在 Pull Request 页面选择 ​​“压缩合并”​
  2. 系统会将分支的所有更改压缩成一个提交,并合并到目标分支。
优缺点​:
优点缺点
主分支历史简洁丢失原分支的详细提交记录
避免无关中间提交不利于后期追踪单次修改的上下文

3. 变基合并(Rebase Merge)​

特点
  • 线性历史​:将分支的提交“重新播放”到目标分支的最新提交之后,​不生成合并提交
  • 修改提交历史​:原分支的提交哈希会改变(属于破坏性操作)。
适用场景
  • 需要保持提交历史完全线性(如开源项目的主分支)。
  • 本地分支同步主分支更新时常用(需在本地执行 git rebase)。
注意事项
  • Gitee 的 Web 端不支持直接变基合并,需通过命令行操作:
    git checkout feature
    git rebase master
    git checkout master
    git merge feature  # 快进合并(Fast-forward)
优缺点
优点缺点
提交历史线性清晰操作复杂,容易出错
无多余合并提交重写历史可能影响协作

三种方式对比总结

合并方式提交历史是否生成合并提交适用场景
普通合并保留分叉和合并记录长期分支合并,需完整历史
压缩合并压缩为单一提交是(但只有一个)简化历史,合并短期分支
变基合并线性历史(无分叉)追求简洁历史,需本地操作

如何选择?​

  1. 团队协作​ → 优先用 ​普通合并​(保留上下文)。
  2. 临时分支​ → 选择 ​压缩合并​(避免无关提交)。
  3. 个人项目/开源项目​ → 本地 ​变基合并​(保持历史整洁)。
http://www.lryc.cn/news/2397861.html

相关文章:

  • 从零到一:我的技术博客导航(持续更新)
  • SpringBoot整合Flowable【08】- 前后端如何交互
  • DM达梦数据库开启SQL日志记录功能
  • 00 QEMU源码分析中文注释与架构讲解(v8.2.4版本)
  • 【五模型时间序列预测对比】Transformer-LSTM、Transformer、CNN-LSTM、LSTM、CNN
  • 深入了解MCP基础与架构
  • 实验设计与分析(第6版,Montgomery)第5章析因设计引导5.7节思考题5.13 R语言解题
  • 怎么选择合适的高防IP
  • 【java面试】MySQL篇
  • 贪心算法应用:欧拉路径(Fleury算法)详解
  • 【算法设计与分析】实验——二维0-1背包问题(算法分析题:算法思路),独立任务最优调度问题(算法实现题:实验过程,描述,小结)
  • P12592题解
  • ffmpeg命令(二):分解与复用命令
  • 【Git】View Submitted Updates——diff、show、log
  • deepseek原理和项目实战笔记2 -- deepseek核心架构
  • 在 MATLAB 2015a 中如何调用 Python
  • 房屋租赁系统 Java+Vue.js+SpringBoot,包括房屋类型、房屋信息、预约看房、合同信息、房屋报修、房屋评价、房主管理模块
  • 华为OD机试真题——生成哈夫曼树(2025B卷:100分)Java/python/JavaScript/C/C++/GO六种最佳实现
  • react与vue的渲染原理
  • 我提出结构学习的思路,意图用结构学习代替机器学习
  • Outbox模式:确保微服务间数据可靠交换的设计方案
  • 数据可视化的定义和类型
  • sqlite-vec:谁说SQLite不是向量数据库?
  • Redis最佳实践——性能优化技巧之监控与告警详解
  • R3GAN训练自己的数据集
  • MATLAB实战:Arduino硬件交互项目方案
  • bert扩充或者缩小词表
  • 什么是 TOML?
  • git怎么合并两个分支
  • 1.文件操作相关的库