Git系列:git merge 使用技巧

news2024/12/26 11:05:41

在这里插入图片描述
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
在这里插入图片描述

  • 推荐:「stormsha的主页」👈,持续学习,不断总结,共同进步,为了踏实,做好当下事儿~
  • 专栏导航
    • Python面试合集系列:Python面试题合集,剑指大厂
    • GO基础学习笔记系列:记录博主学习GO语言的笔记,该笔记专栏尽量写的试用所有入门GO语言的初学者
    • 数据库系列:详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等
    • 运维系列:总结好用的命令,高效开发
    • 算法与数据结构系列:总结数据结构和算法,不同类型针对性训练,提升编程思维

非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

💖The Start💖点点关注,收藏不迷路💖

📒文章目录

  • Git Merge 技巧:高效合并代码的艺术
    • 1. 理解 Git Merge 的基础
      • 1.1 快进合并(Fast-forward Merge)
      • 1.2 三方合并(Three-way Merge)
    • 2. 使用 `--no-ff` 选项
    • 3. 合并策略
      • 3.1 策略选项
    • 4. 处理合并冲突
      • 4.1 使用图形化工具
      • 4.2 手动解决冲突
    • 5. 合并多个分支
    • 6. 保持历史清洁
      • 6.1 使用 `rebase`
      • 6.2 压缩小的提交
    • 7. 使用 `ours` 或 `theirs` 解决冲突
    • 8. 避免合并提交
    • 结语


在这里插入图片描述

Git Merge 技巧:高效合并代码的艺术

在软件开发中,git merge 是一个常用的命令,用于将不同的代码分支合并在一起。掌握一些高级的合并技巧,可以帮助开发者更高效地进行代码整合。以下是一些中高级的 git merge 使用技巧,旨在帮助开发者提升代码合并的效率和质量。

git merge 命令的参数包括:

  • --no-ff: 当合并时创建一个新的合并提交,即使当前分支是快进合并。
  • --squash: 将所有合并的提交压缩成一个单一的提交。
  • --strategy: 指定合并策略,如 recursive(递归,默认策略)、resolve(解决)、octopus(八爪鱼,用于多分支合并)。
  • --ours: 使用当前分支的版本,忽略其他分支的更改。
  • --theirs: 使用被合并分支的版本,忽略当前分支的更改。
  • --abort: 中止一个正在进行的合并过程。
  • --continue: 在解决冲突后继续合并过程。
  • -m <message>: 为创建的合并提交指定提交信息。
  • --no-edit: 不编辑合并提交信息,使用默认信息。
  • --no-commit: 不创建合并提交,将更改放在暂存区和工作目录中。
  • --quiet: 减少命令输出的详细程度。

1. 理解 Git Merge 的基础

在深入技巧之前,理解 git merge 的基础是必要的。git merge 命令用于将两个或多个开发历史合并在一起。

1.1 快进合并(Fast-forward Merge)

当两个分支的提交历史是线性的时候,Git 可以执行快进合并,即直接将一个分支的指针移动到另一个分支的顶部。

1.2 三方合并(Three-way Merge)

当两个分支有共同的祖先,但是已经分叉了一段时间,Git 会创建一个新的“合并提交”(merge commit),它有多个父提交,分别指向两个分支的末端。

2. 使用 --no-ff 选项

在默认情况下,如果合并可以执行快进,Git 会这样做。但是,有时候我们希望即使在快进合并的情况下也创建一个新的合并提交。这时可以使用 --no-ff 选项。

git merge --no-ff branch-name

3. 合并策略

Git 提供了不同的合并策略,可以通过 -c--config 选项来设置。

3.1 策略选项

  • resolve:当有冲突时,尝试自动解决。
  • recursive:默认策略,适用于大多数情况。
  • octopus:允许同时合并多个分支。
git merge -c strategy-name branch-name

4. 处理合并冲突

合并冲突是合并过程中常见的问题,以下是一些处理冲突的技巧。

4.1 使用图形化工具

使用图形化的合并工具可以更直观地查看和解决冲突。

git mergetool

4.2 手动解决冲突

有时候,手动编辑冲突的文件并解决冲突是必要的。解决后,需要标记文件为已解决。

git add resolved-file

5. 合并多个分支

有时需要将多个分支的更改合并到一个分支中。可以使用 git merge 的多次合并。

git merge branch1 branch2 branch3

6. 保持历史清洁

在合并之前,确保分支历史是清洁的,可以提高合并的效率。

6.1 使用 rebase

git rebase 可以重新定位一系列提交,使其在另一个分支的顶部。

git rebase main feature-branch

6.2 压缩小的提交

使用 git rebase -i 可以交互式地重写提交历史,合并小的提交,使历史更加清晰。

git rebase -i HEAD~N

7. 使用 ourstheirs 解决冲突

在某些情况下,你可能希望在冲突中优先使用某一方的更改。

git checkout --ours file-with-conflict

或者

git checkout --theirs file-with-conflict

8. 避免合并提交

在某些情况下,你可能不希望在合并时创建一个新的合并提交。

git merge --squash branch-name

这将把所有的更改合并到一个单一的提交中。

结语

掌握 git merge 的高级技巧对于任何开发者来说都是一项宝贵的技能。通过上述的技巧,你可以更高效地合并代码,减少合并冲突,保持项目历史的清晰。记住,实践是学习的最佳方式,所以不要害怕尝试不同的方法,找到最适合你的工作流程。


❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏、分享下吧,非常感谢!👍 👍 👍

🔥🔥🔥道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

💖The End💖点点关注,收藏不迷路💖

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1663889.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

引入Minio

前置条件 官网&#xff1a;https://www.minio.org.cn/download.shtml#/kubernetes 命令 # 查看系统上的网络连接和监听端口信息 netstat -tpnl # 检查系统的指定端口占用情况 sudo netstat -tuln | grep 9000systemctl status firewalld # 临时关闭 systemctl stop firewall…

建发弘爱 X 袋鼠云:加速提升精细化、数字化医疗健康服务能力

厦门建发弘爱医疗集团有限公司&#xff08;简称“建发弘爱”&#xff09;创立于2022年&#xff0c;是厦门建发医疗健康投资有限公司的全资子公司&#xff0c;专业从事医疗健康领域的医疗服务。 建发弘爱通过医疗、健康及产业服务三大板块&#xff0c;为百姓提供医疗和健康全生…

【系统规划与管理师】2024年5月考前最后冲刺指南

一、备考关键&#xff1a; 高效率的备考方式&#xff1a;多轮迭代学习 △ 基础阶段 △ 大面积撒网(60%) 略读&#xff0d;> 做题 &#xff0d;> 回顾 &#xff0d;> 精读 △ 积累阶段 △ 有针对性的突破(30%) 完成所有章节之后&#xff0c;进行真题测试&#x…

地磁暴红色预警来袭,普通人该如何应对?绝绝子的防护指南来了

近日&#xff0c;国家空间天气监测预警中心发布了一则令人瞩目的消息——地磁暴红色预警。这一预警不仅提醒我们地磁暴即将影响我国的电离层和低轨卫星&#xff0c;更让我们深刻认识到地球空间环境的脆弱性和复杂性。对于普通公众而言&#xff0c;地磁暴的概念可能相对陌生&…

【排序算法】之快速排序

一、算法介绍 快速排序(Quick sort)是由C.A.R.Hoare提出来的。快速排序法又叫分割交换排序法&#xff0c;是目前公认的最佳排序法&#xff0c;也是使用“分而治之”的方式&#xff0c;会先在数据中找到一个虚拟的中间值&#xff0c;并按此中间值将所有打算排序的数据分为两部分…

共享旅游卡免费旅游真实反馈,有图有真相?

新伙伴体验&#xff0c;云南昆大丽6天5晚品质双人游&#xff0c;真实反馈&#xff01;珠海伙伴蔡总&#xff0c;加入千益畅行共享旅游卡团队&#xff0c;自己亲自体验“云南昆大丽6天5晚品质双人游”真实反馈&#xff0c;分享全程内容截图&#xff0c;无半点虚假&#xff01; …

第一条腿:工作中解决技术问题的记录

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录前言系列文章目录前言速度规划S曲线机械臂轨迹规划碰撞检查感知导航感知似然场局部规划&#xff08;很像DWA但是不依赖地图&#…

Git克隆仓库报错:HTTP/2 stream 1 was not closed

报错及原因 fatal: unable to access ‘https://github.com/xxx/’: HTTP/2 stream 1 was not closed cleanly before end of the underlying stream http/2 和 http/1.1之间有个区别是“HTTP2 基于 SPDY&#xff0c;专注于性能&#xff0c;最大的一个目标是在用户和网站间只…

docker01-简介和概述

什么是docker&#xff1f; 我们现在开发项目是在windows操作系统使用idea开发&#xff0c;本地windows操作系统上有我们项目所需的jdk&#xff0c;mysql&#xff0c;redis&#xff0c;tomcat等环境&#xff0c;如果我们想打包我们的项目到一个别的服务器上&#xff0c;在别的服…

LNMP环境部署WordPress——使用源码包安装方式部署环境

目录 一.前提准备 二.源码安装Mysql 1.MySQL类型 2.MySQL 版本说明 3.MySQL 安装方式 3.1 yum 安装 3.2 编译安装 3.3 二进制安装 3.4 rpm 安装 4. 编译安装MySQL5.7 4.1 清理安装环境 4.2 创建mysql用户 4.3 从官网下载tar包 4.4 安装编译工具 4.5 解压 4.6 …

设计软件有哪些?渲染软件篇(4),渲染100邀请码1a12

除了之前介绍的一些渲染软件&#xff0c;这次我们继续介绍。 1、渲染100(http://www.xuanran100.com/?ycode1a12) 渲染100是网渲平台&#xff0c;为设计师提供高性能的渲染服务。通过它设计师可以把本地渲染移到云端进行&#xff0c;速度快价格便宜&#xff0c;支持3dmax、v…

itextpdf 7生成pdf(主要是文字和表格,支持中文)

我们经常会遇到要导出pdf的需求,方式有很多种 今天的教程是采用itextpdf的方式生成pdf itextpdf是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF文档&#xff0c;而且可以将Html文件转化为PDF文件。 这里先展示一下效果图 首先在pom.xml中引入相关依赖 <dep…

目标检测——道路检测数据集

引言 亲爱的读者们&#xff0c;您是否在寻找某个特定的数据集&#xff0c;用于研究或项目实践&#xff1f;欢迎您在评论区留言&#xff0c;或者通过公众号私信告诉我&#xff0c;您想要的数据集的类型主题。小编会竭尽全力为您寻找&#xff0c;并在找到后第一时间与您分享。 …

K8S搭建

文章目录 K8S搭建配置要求 安装 Kuboard-Spray加载离线资源包规划并安装集群访问集群重启Kubernetes集群Worker节点不能启动许多Pod一直Crash或不能正常访问 containerd配置网络代理 常用的 kubectl 命令&#xff1a; K8S搭建 安装高可用的Kubernetes集群 配置要求 对于 Kub…

PG 检查点管理与Oracle的比较

之前介绍过&#xff0c;在任何数据库中&#xff0c;一条DML操作执行都需要在内存中执行&#xff0c;但当操作越来越多&#xff0c;总有时候内存会写满&#xff0c;这时候就需要把内存中的块写入到磁盘&#xff0c;释放内存&#xff0c;保存数据。 写入到磁盘这一步&#xff0c;…

基于 Satchmo 实现自定义捐款模块

1、问题背景 我在 Satchmo 中构建捐款模块时遇到了一些困难。我可以自定义 Satchmo 的产品模型&#xff0c;但无法找到任何与捐赠相关的内容。 我知道可以创建一个捐赠虚拟产品&#xff0c;但据我所知&#xff0c;这仍然需要预先设定金额&#xff08;例如 5 美元、10 美元等&…

Java并发处理

Java并发处理 问题描述:项目中业务编号出现重复编号 生成编号规则&#xff1a;获取数据库表最大值&#xff0c;然后再做1处理&#xff0c;即为新编号&#xff08;因为起始值是不固定的&#xff0c;还存在‘字符数据’格式&#xff0c;做了字典项可配置&#xff0c;所以不能直…

03、SpringBoot 源码分析 - SpringApplication启动流程三

SpringBoot 源码分析 - SpringApplication启动流程三 初始化基本流程SpringApplication的setListeners设置监听器deduceMainApplicationClass对端主启动类rungetRunListeners获取SpringApplicationRunListener监听器EventPublishingRunListener的构造方法SimpleApplicationEven…

js 数据格式转换,对象转数组,数组转对象

1.对象转数组 // 对象obj转换成数组格式 let obj { orgCode:分局编码, alertId:告警ID, name:告警名称 } let arr [] for(let key in obj) { console.log(11,key,obj[key]); // 定义一个对象&#xff0c;赋值 let o { id: key, // key是obj对象的键值 label: obj[key] …

LeetCode-2391. 收集垃圾的最少总时间【数组 字符串 前缀和】

LeetCode-2391. 收集垃圾的最少总时间【数组 字符串 前缀和】 题目描述&#xff1a;解题思路一&#xff1a;处理垃圾和路程单独计算。解题思路二&#xff1a;逆向思维&#xff0c;计算多走的路解题思路三&#xff1a;只记录&#xff0c;当前t需要计算几次 题目描述&#xff1a;…