0007-Git不完全操作指南之本地操作3——merge

概念

我们现在已经了解了分支的概念,也知道了要如何新建分支了。当我们在开发新功能时,通常会先创建一个新分支,在这个新分支的基础上开发,当功能开发并测试完毕,准备上线时,就需要将这个分支合并会主分支,让主分支包含所有的变更。那么,我们要如何合并分支呢?今天我们要学习的merge就是合并分支的其中一种方式。

merge命令在 Git 中合并两个分支时会产生一个特殊的提交记录,它有两个父节点。翻译成自然语言相当于:"我要把这两个父节点本身及它们所有的祖先都包含进来。"

图示

我们准备了两个分支,每个分支上各有一个独有的提交。这意味着没有一个分支包含了我们修改的所有内容。咱们通过合并这两个分支来解决这个问题。

如下图,我们要把 bugFix 合并到 main 里。

执行以下命令:

bash 复制代码
git merge bugFix

从上图我们可以发现,我们在执行了merge命令后,产生了一条新的提交记录C4,并且我们main分支的指针指向了该提交记录,我们在讲分支时说过,分支其实就是简单的一个指向某个提交的指针,当main分支指向了C4提交之后,因为C4提交已经包含了我们这个仓库中所有的提交了,也就意味着main分支已经包含了所有的提交了。

如果此时我们想让bugFix分支也合并一下main分支,让bugFix分支也包含所有变更要怎么操作呢?

bash 复制代码
git checkout bugFix
git merge main

此时由于main分支本身就包含了所有提交,因此只需要将bugFix的指针直接指向C4提交,即main所指向的提交记录即可。

从上面的图示中,我们也可以看到,merge操作也有一个弊端,就是会产生一条新的提交记录C4,并且产生了一条分叉。这条记录是一个合并历史。即我们实际上更改了git的提交线,在里面增加了一条提交记录。那么,有没有一种方法,能让我们不产生新的提交记录就能够让目标分支包含所有变更,让我们的主分支的提交记录看起来足够清爽呢?答案是有的。我们可以用rebase实现,这个我们下一节再详说,不然就喧宾夺主了。

常用命令

bash 复制代码
# 将目标分支合并到当前分支
git merge bugFix

# 将合并过来的分支的所有提交记录合并成一条
git merge --squash bugFix

# 执行上述命令后,无论你再bugFix分支上有多少条当前分支上没有的提交记录,在合并时,都会
# 合并成一条,这样,我们当前分支就不会包含一堆bugFix分支的中间临时提交记录,只会有一个
# 最终的提交记录,看起来会干爽很多

# 显示执行合并时产生的新的提交记录的提交信息。
git merge -e "merge: bugFix into main"

# 如果在合并过程中发生了冲突,那么有以下两种处理方式
# 1. 不想继续合并了,想要终止合并
git merge --abort
# 2. 已经解决了冲突了,继续合并
git merge --continue
相关推荐
zho_uzhou11 小时前
Git入门概念
git
爱奥尼欧20 小时前
【Git】远程分支删了本地还在、两个分支历史不相干?两招故障排解
开发语言·git
Java后端的Ai之路20 小时前
Git冲突完整排查与实战:本地修改覆盖报错到成功推送全流程复盘
开发语言·人工智能·git·python·pop
一个心烑21 小时前
配置项目git的 SSL 证书
git·网络协议·ssl
IT从业者张某某1 天前
【鸿蒙PC命令行适配】GitUI 移植的工程实践:双 Git 引擎(libgit2/gitoxide)的鸿蒙适配之路
git·华为·harmonyos
xinjia_ctrl1 天前
暑假实习总结
git·后端·spring·maven·intellij-idea
Molesidy1 天前
【Git】分别给出添加到Keil工程和IAR工程中的gitnore文件以便不跟踪编译文件的git记录
git·vscode·插件
颜颜yan_2 天前
Git Cola 鸿蒙 PC 版适配全记录:从 Qt 桌面工具到 ArkTS 原生应用
git·qt·harmonyos
知福致福2 天前
【技术复盘】Git 分支污染与提交污染事故排查与解法
大数据·git·elasticsearch
ai安歌2 天前
Git Extensions 鸿蒙 PC 适配全记录:从 WinForms 客户端到 ArkUI 原生工作台
git·华为·harmonyos