0

0

git怎么合并分支代码

青灯夜游

青灯夜游

发布时间:2023-01-04 11:24:48

|

11986人浏览过

|

来源于php中文网

原创

git合并分支代码的方法:1、使用“git merge”命令,该命令用来做分支合并,可以将其他分支中的内容合并到当前分支中。2、使用“git rebase”命令,该命令用于改变当前的分支的基点,进而实现分支合并。

git怎么合并分支代码

本教程操作环境:Windows7系统、Git2.30.0版、Dell G3电脑。

在项目中,我们总会创建很多分支进行不同功能或者需求的开发,等功能完成后再合并回主分支。那么如何才能优雅的合并分支呢?如果此时你提起了兴趣,那么不妨继续读下去了。

建立多人开发场景

1. 创建仓库

// 初始化仓库
git init
// 创建a.txt
touch a.txt
// 创建b.txt
touch b.txt
// 加入暂存区
git add .
// 提交
git  commit -m 'initial'

1.png

2. 创建 feature 分支

git checkout -b feature

在这里插入图片描述

3. 两个分支同时开发

feature 分支开发下一版本新功能,提交了两次,分别修改 a.txt 文件和 b.txt 文件。

2.png

master 分支开发本次版本功能,同样提交了两次,且修改了 a.txt 文件和 b.txt 文件。


3.png

当前分支情况如下图,各节点上面的字符是每次 commit 的散列值,当前 master 分支的 header 在 c5 节点上,feature 分支的 header 在 c3 节点上。
在这里插入图片描述

这个时候需要将 feature 分支合并回 master 分支,有两种方案:

  • 在 master 分支上直接 merge feature 分支;

  • 是先在 feature 分支上 rebase(变基),然后在 master 分支上 merge feature 分支。

下面分别说明一下这两种方案:

合并命令1:git merge

git merge 用来做分支合并,将其他分支中的内容合并到当前分支中。

git merge 操作比较暴力,也是用的比较多的方式,下面演示的是 feature 分支合并至 master 分支,具体过程如下:

  • 找到 feature 分支和 master 分支的最近共同祖先 commit 节点 c1;

  • 把 feature 分支的最新一次 commit 节点 c3 和 master 分支上的最新一次 commit 节点 c5 合并,此时若有冲突,则一次性解决所有冲突,然后生成一个新的 commit 节点 c6;

  • 同时根据两个分支上的 commit 时间的先后顺序,依次放到 master 分支上,使用git log可以看到时间顺序。

上面流程的结果示意图如下所示:

4.png

在项目中的操作命令如下。可以看到执行 git merge feature 命令后,存在冲突,进入 merging 工作区,然后一次性解决所有冲突后,提交一个新的 commit。

5.png

执行 gitk 命令行,可以在界面上看到当前分支如下图所示。有一个新的 commit。
在这里插入图片描述

合并命令2:git rebase

这个命令从名字上就可以直观看出它的功能:改变当前的分支的基点。对于 feature 分支,它是从 master 分支的 c1 节点创建的分支,所以它的基点就是 c1。如果在 feature 分支上执行 git rebase master ,其过程大致如下:

  • 找到当前 master 分支最新的 commit 节点 c5,将 feature 分支的基点变成 c5 节点。;

    mallcloud商城
    mallcloud商城

    mallcloud商城基于SpringBoot2.x、SpringCloud和SpringCloudAlibaba并采用前后端分离vue的企业级微服务敏捷开发系统架构。并引入组件化的思想实现高内聚低耦合,项目代码简洁注释丰富上手容易,适合学习和企业中使用。真正实现了基于RBAC、jwt和oauth2的无状态统一权限认证的解决方案,面向互联网设计同时适合B端和C端用户,支持CI/CD多环境部署,并提

    下载
  • 若 feature 分支与 master 分支存在冲突,那么将根据 feature 分支的提交时间,依次解决冲突,并修改 feature 分支此次 commit 的散列值。

  • 最终在分支上看,呈现一条直线,但是存在历史commit覆写的问题。

上面过程的结果示意图如下所示,其中 c2’和 c3’表示散列值改变了。

在这里插入图片描述

值得注意的是:

  • 执行 rebase 操作的时候,需要保证 master 分支处于最新状态,否则在 merege 合并的时候也可能存在冲突,就失去使用 rebase 的意义。

  • 千万不要对已经推到远程的内容进行rebase,如果有人拉取远程代码后修改并提交,分支会变得极其麻烦。

了解其基本过程后,我们就可以是用 rebase 命令开始进行合并分支的操作:

  • 在项目中执行 git rebase master,如下所示。因为两次提交都存在冲突,故在 rebase 工作区中需要依次解决这些冲突。

6.png

在 feature 分支上执行 gitk 命令,可以在界面中看到:
在这里插入图片描述

  • feature 分支完成变基之后,切换回 master 分支执行 git merge feature,就可以完成合并操作。

在这里插入图片描述

在 master 分支上执行 gitk,其分支结构如下。可以看到分支呈现一条线,看上去非常清爽。

在这里插入图片描述

说明:git stash

有时候分支上的代码还没开发完成,需要合并分支,此时只需要:

1、执行 git stash 将工作区内容存储起来,然后选择上述两种合并分支的方式进行分支合并。

在这里插入图片描述

2、完成分支合并后,切回开发的分支,执行 git stash pop 将工作区内容弹出就可以继续愉快的写代码了。

在这里插入图片描述

总结

git merge 比较粗暴,也是大多数会选择的方式,这种方式可以保证每个 commit 都按照时间顺序排列,但是分支图会非常凌乱,而会引入一次没有意义的 commit。

git rebase 在历史提交记录就是一条线,非常优雅,但存在修改历史commit的风险,并且git log查看日志时commit时间线错乱。同时,谨记已推送至远程的内容就不要再变基,否则分支会变得很乱。

个人倾向于使用 rebase 方法,毕竟 commit 的认知成本摆在那里,而且看着也舒服。不过如果开发人员很多,还是merge吧,毕竟一个个解决冲突会烦死个人,哈哈哈

在项目中,我们总会创建很多分支进行不同功能或者需求的开发,等功能完成后再合并回主分支。那么如何才能优雅的合并分支呢?如果此时你提起了兴趣,那么不妨继续读下去了。

相关专题

更多
自建git服务器
自建git服务器

git服务器是目前流行的分布式版本控制系统之一,可以让多人协同开发同一个项目。本专题为大家提供自建git服务器相关的各种文章、以及下载和课程。

662

2023.07.05

git和svn的区别
git和svn的区别

git和svn的区别:1、定义不同;2、模型类型不同;3、存储单元不同;4、是否拥有全局版本号;5、内容完整性不同;6、版本库不同;7、克隆目录速度不同;8、分支不同。php中文网为大家带来了git和svn的相关知识、以及相关文章等内容。

528

2023.07.06

git撤销提交的commit
git撤销提交的commit

Git是一个强大的版本控制系统,它提供了很多功能帮助开发人员有效地管理和控制代码的变更,本专题为大家提供git 撤销提交的commit相关的各种文章内容,供大家免费下载体验。

265

2023.07.24

git提交错误怎么撤回
git提交错误怎么撤回

git提交错误撤回的方法:git reset head^:撤回最后一次提交,恢复到提交前状态。git revert head:创建新提交,内容与之前提交相反。git reset :使用提交的 sha-1 哈希撤回指定提交。交互式舞台区:标记要撤回的特定更改,然后提交,排除已撤回更改。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

550

2024.04.09

git怎么对比两个版本的文件内容
git怎么对比两个版本的文件内容

要对比两个版本的 git 文件,请使用 git diff 命令:git diff 比较工作树和暂存区之间的差异。git diff 比较两个提交或标签之间的差异。git diff 输出显示差异块,其中 + 表示添加的行,- 表示删除的行, 表示修改的行。可使用 gitkraken、meld、beyond compare 等可视化工具更直观地查看差异。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

513

2024.04.09

html编辑相关教程合集
html编辑相关教程合集

本专题整合了html编辑相关教程合集,阅读专题下面的文章了解更多详细内容。

38

2026.01.21

三角洲入口地址合集
三角洲入口地址合集

本专题整合了三角洲入口地址合集,阅读专题下面的文章了解更多详细内容。

18

2026.01.21

AO3中文版入口地址大全
AO3中文版入口地址大全

本专题整合了AO3中文版入口地址大全,阅读专题下面的的文章了解更多详细内容。

234

2026.01.21

妖精漫画入口地址合集
妖精漫画入口地址合集

本专题整合了妖精漫画入口地址合集,阅读专题下面的文章了解更多详细内容。

61

2026.01.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Git 教程
Git 教程

共21课时 | 2.9万人学习

Git版本控制工具
Git版本控制工具

共8课时 | 1.5万人学习

Git中文开发手册
Git中文开发手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号