Git Merge 实例教学:同步代码库与处理分支冲突的最佳实践


前言

在团队协作的开发过程中,Git 是不可或缺的版本控制工具。对于开发者来说,理解并熟练使用 git merge 命令尤为重要,尤其是在处理多个分支合并、解决冲突、保持代码一致性时。无论是合并新的功能分支,还是同步最新的代码库,git merge 都能帮助我们在开发过程中更高效地管理代码。这篇文章将详细介绍 git merge 的基本用法、常见参数及实际操作示例,希望能够为你在日常开发中的分支管理提供帮助。
在这里插入图片描述


一、git merge是什么?

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

二、git merge基本用法

1. 合并两个分支

在这里插入图片描述
这个命令会将 bugFix 分支的修改合并到当前分支。如果有冲突,你需要手动解决冲突。

git merge bugFix

2. 合并时创建合并提交

默认情况下,git merge 会创建一个新的合并提交(merge commit)来记录合并操作。这种方式称为“合并提交”。
在这里插入图片描述

3. 快进合并(Fast-forward Merge)

如果当前分支是目标分支的直接祖先,Git 会执行快进合并,不会创建新的合并提交。目标分支指的是merge后面跟着的分支名,现在当前分支是bugFix,目标分支是main,下面的命令的意思是将main分支合并到当前分支

git merge --ff-only main

在这里插入图片描述

这样就不会出现合并提交,也就是不会有提交记录
在这里插入图片描述

使用 --ff-only 参数可以确保只有在快进合并的情况下才会合并,否则会失败。

4. --abort参数

如果在合并过程中遇到问题,或者决定不再进行合并,可以使用 git merge --abort 来取消合并操作。此命令会取消合并并恢复到合并之前的状态。

git merge --abort

注意: git merge --abort 只在合并冲突时有效。如果没有冲突或合并已完成,git merge --abort 不会有任何效果。

5. --continue参数

在解决完合并冲突后,你需要使用 git merge --continue 来继续合并操作,这是 Git 2.12 及更高版本引入的命令,专门用于继续进行被中断的合并操作。这个命令会继续未完成的合并过程,提交合并的结果。

git merge --continue

注意: git merge --continue 只在解决冲突后有效,且在有冲突的情况下才能使用。如果合并过程中没有冲突,这个命令不会有任何效果,也就是不需要运行--continue这个命令

6. -X theirs参数

当你对 目标分支 的改动更有信心,或者当你希望在冲突发生时优先保留 目标分支 的更改时,使用 -X theirs 可以简化合并过程。git merge-X theirs 参数是一种策略选项,用于自动解决合并冲突时更倾向于保留“目标分支”(即合并进来的分支)的更改。这是通过忽略“当前分支”的更改来实现的。
假设你在 main 分支上,你要将 feature 分支合并到 main 分支,如果 mainfeature 分支之间存在冲突,Git 会自动选择 feature 分支中的更改,并忽略 main 分支中的更改。

git merge -X theirs feature

注意:-X theirs 并不会全盘替换当前分支的所有内容,而是只在发生冲突时自动选择目标分支的更改。如果没有冲突,合并过程与正常的合并一样,不受 -X theirs 影响。该选项在合并过程中自动解决冲突,但使用时需要谨慎,因为它会导致你放弃当前分支中的冲突部分的更改。

-X ours: 相反的选项,它会在冲突时自动保留 当前分支 的更改,而忽略 目标分支 的更改。

三、实际例子

现在假设有两个分支,一个是现有的branch分支,一个是main主分支,当已经在branch分支上开发完新功能并且提交过了,但是你还想拉取 Git 仓库中main主分支中最新的代码也合并到你所在分支再进行提交并推送到 Git 仓库中,这种情况也是非常常见的,我们可以采取以下措施

1. 更新仓库

当远程仓库存在本地仓库没有的提交时,使用以下命令可以从远程仓库下载本地仓库中缺失的提交记录和更新远程分支指针(如 origin/main),更新本地最新的origin/main远程记录

git fetch

注意:git fetch 并不会改变你本地仓库的状态。它不会更新你的 main 分支,也不会修改你磁盘上的文件。也就是说不要以为执行了 git fetch 以后,本地仓库就与远程仓库同步了。它只是已经将进行这一操作所需的所有数据都下载了下来,但是并没有修改你本地的文件。

2. 将origin/main分支合并到当前分支

将本地的远程分支origin/dev给合并进到当前分支里面

git merge origin/dev

如果合并没有出现冲突(理想情况)那么就会出现一个编辑器的界面,提示合并完成,这时按下Ctrl+X就可以提出了,但是实际情况很有可能出现冲突,此时就要你手动处理冲突再继续进行合并了

3. 解决冲突

  1. 手动解决冲突

打开冲突的文件,手动编辑并解决冲突。冲突的标记如下:

<<<<<<< HEAD
// 当前分支的内容
=======
// 被合并分支的内容
>>>>>>> <branch>

如果git仓库连接了vscode的话,可以在左侧的源代码管理中的图形化界面解决冲突更方便,例如下面的

在这里插入图片描述

  1. 完成合并
    继续进行因为冲突而未完成的合并
git merge --continue

4. 推送到仓库

到这一步你的当前分支应该已经有了远程主分支最新的更改了,此时可以直接推送你开发完成的新功能到仓库里

git push

总结

通过这篇文章,我们深入了解了 git merge 的工作原理以及如何使用该命令来合并分支和处理冲突。掌握这些知识后,你可以更加自信地进行分支操作,确保团队协作中的代码合并顺利无误。无论是通过自动解决冲突的 -X theirs 选项,还是在遇到问题时使用 git merge --abort 来回滚操作,这些工具都可以帮助你在复杂的开发环境中游刃有余。希望本文能为你的 Git 使用经验锦上添花,让你在实际项目中更加高效地进行版本控制🌹

  • 26
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值