Git的merge和rebase你真的了解吗?

发布时间:2024年01月23日

1. 前言

在我们的日常开发中,Git扮演着重要的角色,负责管理代码的版本。分支管理在开发过程中具有显著的影响。通常情况下,我们有生产、预发、测试和开发这几种分支。根据项目的不同阶段,我们会将代码提交到相应的版本上。标准的流程是先进行开发,然后进行测试,预发,最后上线到生产环境。然而,由于存在多个版本,有特定的上线顺序,并且我们的开发团队成员众多,因此,有效地管理项目的远程分支和每个开发人员的本地分支就变得至关重要。

在这里插入图片描述

在软件开发过程中,dev、test、uat和master这些版本阶段是常见的流程,它们分别代表了开发过程中的不同阶段。以下是每个阶段的详细解释:

  1. Dev(开发)版本:
    • 这个阶段通常由开发者进行。
    • 开发者在本地环境中进行代码编写和功能开发。
    • 代码可能尚未完成或存在一些bug。
    • 这个阶段的主要目的是完成新功能或修复已知问题。
  2. Test(测试)版本:
    • 一旦开发完成,代码会进入测试阶段。
    • 测试人员对dev版本进行详细的测试,确保软件的功能、性能和稳定性满足要求。
    • 在这个阶段,可能会发现一些新的bug或问题,需要进行修复。
    • 测试版本通常用于发现和修复问题,确保软件的质量。
  3. UAT(用户验收测试)版本:
    • UAT阶段是在软件开发接近完成时进行的。
    • 这个阶段通常由真实的用户或客户进行测试,以验证软件是否满足用户需求。
    • 用户验收测试的目的是确保软件在真实场景中能够正常工作,并满足用户期望。
    • 在这个阶段,用户可能会提出一些反馈和建议,以便进一步完善软件。
  4. Master(主)版本:
    • Master版本通常是软件的最终版本,代表软件发布前的状态。
    • 在这个阶段,所有的bug修复和功能改进都已经完成,并且通过了所有必要的测试。
    • Master版本用于最终的质量检查和准备发布。
    • 一旦软件达到Master版本状态,它就可以被发布给最终用户使用。

2. 普通开发流程

在正常的版本发布过程中,通常会经历dev、test、uat和master这四个阶段。按照以下流程进行操作是合理的:从master分支拉取版本,然后推送到相应的分支上进行发布。重要的是保持预发和生产环境的代码一致。然而,由于test分支上可能同时进行多个版本的并行开发,因此其代码可能与预发和生产环境有所不同。

在这里插入图片描述

3. 多版本并行开发

在存在多个版本并行开发的情况下,分支的管理会变得更加复杂。由于这些版本的上线时间节点各不相同,因此,test和uat阶段的时间节点也会有所差异。

这里涉及到多种情况

  1. 在后端开发人员较少的情况下,通常2-3人为例,完全可以从master拉取一个开发分支,分支格式以服务名+上线时间,例如xxx_20230130这个本地分支,后端开发人员一起在这个分支上进行并行开发,开发阶段将自己的本地分支merge到dev分支,因为只有2-3人所以冲突解决起来还好,有冲突解决冲突。
  2. 后端开发人员较多的情况,通常在5-8人为例,这时候从master分支拉取分支,分支格式就需要以服务名+姓名缩写+上线时间来命名,尽量每个人在自己命名的分支下进行开发,这样在开发阶段本地测试的时候,可以做到相互不影响,但是在merge到远程分支的时候,解决代码冲突的时候需要认真仔细一些,这种活还是交给心细的人来做吧,测试的时候也需要根据版本上线的优先级进行测试。
  3. 版本比较多的情况,比如一个月会有4-5个版本的开发,那么上线时间也是分4-5个节点,这样就需要每次从先发上线的远程分支,将代码merge到下个版本的本地开发分支上,以此类推。

在这里插入图片描述

4. Git merge

在我们的日常开发工作中,合并分支是一个频繁使用的Git命令。这个命令的主要作用是将一个版本中的最新代码合并到另一个较旧的版本,从而实现版本的同步更新。通过这种方式,我们可以确保各个分支的代码保持一致,并且避免出现分支间的冲突。

在这里插入图片描述

大体就是这么一个步骤,从刚开始的公共分支,变为master和feature分支, 通过git merge master 命令将master分支merge到feature分支。Merge命令会将前面featrue分支所有的commit提交全部合并为一个新的commit提交。这里只有会在产生冲突的时候,才能产生新的commit记录。

可以理解为git pull = git fetch +git merge,拉取最新的远程分支,然后将这个分支合并到另一个分支。

在公司开发中,合并分支命令受到大家的喜爱,因为它简单而直接。通过合并其他分支到自己的分支,开发者可以轻松地同步代码并保持团队的协作。这个命令易于理解和使用,为开发过程提供了高效和可靠的代码合并机制。

5. Git Rebase

作为自己的个人喜好,比较喜欢rebase这个命令,核心理念就是“变基”。

在这里插入图片描述

  1. 由上图可看见,通过reabse命令将feature分支延续到了master分支后面。
  2. 在多人开发过程中,如果其他人在master进行commit,这个时候你在feature分支提交了几个commit,这时候你使用rebase命令,会将你的commit提交记录放在master的commit记录的后面,而merge就会将不同分支的commit合并成一个新的commit记录,这就是merge和rebase的不同点。
  3. 本地feature分支和远端的master分支如果是同一条分支的话,可以使用rebase,保证commit的记录的清晰性,这个很关键!

**注意:**不要在公共分支使用rebase命令,这样会污染公共分支,这样公共分支就会存在你的commit记录,别人拉取的时候会存在你的最新的commit记录。

6. 总结

在软件开发中,我们不仅要关注代码质量,版本管理同样至关重要。上线前遗漏代码的问题时有发生,这样的失误可能是非常危险的。因此,希望本文能够为大家在日常代码版本管理中提供一些警惕,学会合理地合并分支。
码质量,版本管理同样至关重要。上线前遗漏代码的问题时有发生,这样的失误可能是非常危险的。因此,希望本文能够为大家在日常代码版本管理中提供一些警惕,学会合理地合并分支。

文章来源:https://blog.csdn.net/a342874650/article/details/135790811
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。