《Git/Gitlab进阶》九:测试merge和rebase分支合并、处理冲突及特征比照

  • 时间:2022-03-15 14:03 作者:粤下巴人 来源: 阅读:613
  • 扫一扫,手机访问
摘要:本章主要测试讲解git merge和git rebase指令的用法和进行分支合并,并做简单比较分析。测试过程内容较多,每个步骤都逐一截图以便真实说明,也有列示用法。若不感兴趣,可直接查看总结部分。测试过程前置说明关于无论是使用 merge 还是 rebase 进行合并,出现冲突的起因都是在不同的分支

本章主要测试讲解

  • git mergegit rebase指令的用法和进行分支合并,并做简单比较分析。

测试过程内容较多,每个步骤都逐一截图以便真实说明,也有列示用法。若不感兴趣,可直接查看总结部分。

测试过程

前置说明

关于无论是使用 merge 还是 rebase 进行合并,出现冲突的起因都是在不同的分支修改了同一处的代码,合并时版控工具 git 不知道保留哪一份的修改,从而导致冲突,需要合并人员去判断并处理。

使用 merge 和 rebase 合并的做法

1.png

大概流程:

测试 git merge 和 git rebase 的合并及处理冲突效果:

  • 1 准备测试项目及分支记录
    • 创立 master、dev1、dev2 三个分支
    • 除了 master 创立 dev1 和 dev2 的初始提交外,3 个分支各自有两个不同的提交记录
      • 时间顺序为:
        master 新建空文件,再初始提交 –>
        创立 dev2 –> dev2 commit 第一次文件修改 –> dev2 commit 第二次文件修改 –>
        切回 master 创立 dev1 –> dev1 commit 第一次文件修改 –> dev1 commit 第二次文件修改 –>
        切回 master –> master commit 第一次文件修改 –> master commit 第二次文件修改 –>
        进行使用 git merge/git merge 合并测试……
  • 2 使用 git merge 进行合并
  • 3 使用 git rebase 进行合并
  • 4 比照两者合并的历史记录,分析优缺点和使用场景

测试步骤

准备测试项目及分支记录

相关命令请看截图

准备测试项目 test-conflict,新建一个 test1.txt 文件(后续新建的文件,最好都改成 UTF-8,windows 下默认是 ANSI,操作可能会产生乱码),内容为空,并 master 分支初始提交。

2.png

以 master 分支创立 dev2 分支

3.png

dev2 以 master 分支为基准,所以 test1.txt 还是为空的,两次修改 test1.txt

4.png

此时 dev2 的历史记录为

5.png

切换到 master 分支,并创立分支 dev1 并修改文件 test1.txt,而后分别提交

6.png

而后再修改一次,而后第二次提交

7.png

此时 dev1 的日志记录如下

8.png

此时切回到 master 分支,自行也修改并提交两次 test1.txt 的修改

9.png

此时 master 分支的记录为

10.png

直至,准备工作完整,我们打包一份,保留 2 个一模一样的项目,一个测试 git merge,一个测试 git rebase

使用 git merge 进行合并测试

步骤说明:

  • 切换到 master 分支,先合并 dev1 到 master,再合并 dev2 到 master
  • 由于 dev1、dev2 和 master 本来分支都有修改到 test1.txt 的同一行,所以会出现屡次的合并冲突,需要手动处理
  • 合并完成之后,查看 git merge 的 master 的日志

创立时现有 dev2 的提交,但是合并时,先合并 dev1
合并 dev1 到 master,出现冲突

11.png

手动处理冲突并提交

12.png

再合并 dev2 到 master,仍然报冲突

13.png

手动处理并提交

14.png

至此,使用 git merge 已把 dev1 和 dev2 合并到 master 分支,查看 master 分支的日志。

15.png

至此使用 git merge 合并和处理冲突测试完成。

使用 git rebase 合并冲突

使用之前的备份项目测试 git rebase

步骤说明:

  • 切到 dev1 分支,rebase dev1 到 master,处理合并冲突
  • 切回 master 分支(此时 master 的日志还没变),进行一次快速合并到 dev1(现在就变了)
  • 切到 dev2 分支,rebase dev2 到 master,处理合并冲突
  • 切回 master 分支,进行一次快速合并到 dev2
  • 合并完成之后,查看 git rebase 的 master 的日志

切回 dev1 分支,rebase dev1 到 master,会产生冲突。

16.png

修改成以下内容之后,再执行 git add .(没有执行 commit),而后继续进行 rebase

17.png

继续进行 rebase,则弹出第二次冲突提醒

18.png

从文原本看,由于有两行是冲突的,第一次处理冲突是 master 中于 dev1 第一次提交有冲突的内容,现在报的是与 dev1 第二次提交有冲突的内容,同样手动处理,而后继续,可见 rebase 完成。

19.png

至此,使用 rebase,已经把 dev1 上的两次提交的修改变基到了 master 分支的提交修改上。

现在切回 master 分支(当然,此时 master 的日志还没变),进行一次快速合并到 dev1(现在就变了)

20.png

同样的,再合并 dev2,同样处理两次冲突,
第一次冲突

21.png

处理如下

22.png

第二次冲突

23.png

处理如下:

24.png

合并完成

25.png

同样,现在切回 master 分支,进行一次快速合并到 dev2,查看日志

26.png

git merge 和 git rebase 的结果比照

使用 git rebase 后,3 个分支的历史记录如下

27.png

git merge 历史记录如下

28.png

总结

git merge 和 git rebase 进行合并的区别:

  1. 历史记录不同
    • git merge 保留了各个分支各自的提交记录,假如有处理冲突,会单独创立一次 commit 记录冲突的处理,历史记录完整。
    • git rebase 只有一根线的分支记录历史,手动处理的冲突不会创立保留记录,历史记录清晰简单
  2. 操作步骤不同
    • git merge 操作方便,
    • git rebase 操作步骤繁琐。
  3. 影响范围不同
    • git merge 操作未对 dev1 和 dev2 的项目内容(或者提交记录)进行异动,不会影响后续人员对此两个分支进行接续作业。
    • git rebase 操作已经对 dev1 和 dev2 分支进行了异动,假如有后续分支使用了这两个分支,可能会导致提交历史记录的混乱和其它异常情况。

建议:
只对尚未推送或者分享给别人的本地修改执行变基操作清除历史,不要对已推送至别处的提交执行变基操作。

29.png

个人建议
对于合并,假如始终不清楚 merge 和 rebase 的区别,推荐使用 merge。
merge 的一大优点是简单,不会对其它分支造成影响。
唯一可能的不足就是会有比较多(不清晰)的提交记录,这一点可以使用 git rebase -i <commit id="" style="box-sizing: border-box;">,进入 interactive 模式(后续文章有详情),对历史记录进行修改</commit>

新手提示:假如需要合并的分支还有未提交的修改,是没有办法合并的。

30.png

Bonus:修改分支的名字

如果从 master 分支创立了一个 feature-branch 分支,结果写成了 future-brunch

31.png

直接使用git branch -m参数修改就可

git branch -m future-brunch feature-branch
32.png
  • 全部评论(0)
最新发布的资讯信息
【系统环境|】2FA验证器 验证码如何登录(2024-04-01 20:18)
【系统环境|】怎么做才能建设好外贸网站?(2023-12-20 10:05)
【系统环境|数据库】 潮玩宇宙游戏道具收集方法(2023-12-12 16:13)
【系统环境|】遥遥领先!青否数字人直播系统5.0发布,支持真人接管实时驱动!(2023-10-12 17:31)
【系统环境|服务器应用】克隆自己的数字人形象需要几步?(2023-09-20 17:13)
【系统环境|】Tiktok登录教程(2023-02-13 14:17)
【系统环境|】ZORRO佐罗软件安装教程及一键新机使用方法详细简介(2023-02-10 21:56)
【系统环境|】阿里云 centos 云盘扩容命令(2023-01-10 16:35)
【系统环境|】补单系统搭建补单源码搭建(2022-05-18 11:35)
【系统环境|服务器应用】高端显卡再度登上热搜,竟然是因为“断崖式”的降价(2022-04-12 19:47)
手机二维码手机访问领取大礼包
返回顶部