git怎么合并分支代码
发布时间 - 2023-01-04 00:00:00 点击率:次git合并分支代码的方法:1、使用“git merge”命令,该命令用来做分支合并,可以将其他分支中的内容合并到当前分支中。2、使用“git rebase”命令,该命令用于改变当前的分支的基点,进而实现分支合并。
本教程操作环境: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'
2. 创建 feature 分支
git checkout -b feature
3. 两个分支同时开发
feature 分支开发下一版本新功能,提交了两次,分别修改 a.txt 文件和 b.txt 文件。
master 分支开发本次版本功能,同样提交了两次,且修改了 a.txt 文件和 b.txt 文件。
当前分支情况如下图,各节点上面的字符是每次 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可以看到时间顺序。
上面流程的结果示意图如下所示:
在项目中的操作命令如下。可以看到执行 git merge feature 命令后,存在冲突,进入 merging 工作区,然后一次性解决所有冲突后,提交一个新的 commit。
执行 gitk 命令行,可以在界面上看到当前分支如下图所示。有一个新的 commit。
合并命令2:git rebase
这个命令从名字上就可以直观看出它的功能:改变当前的分支的基点。对于 feature 分支,它是从 master 分支的 c1 节点创建的分支,所以它的基点就是 c1。如果在 feature 分支上执行 git rebase master ,其过程大致如下:
找到当前 master 分支最新的 commit 节点 c5,将 feature 分支的基点变成 c5 节点。;
若 feature 分支与 master 分支存在冲突,那么将根据 feature 分支的提交时间,依次解决冲突,并修改 feature 分支此次 commit 的散列值。
最终在分支上看,呈现一条直线,但是存在历史commit覆写的问题。
上面过程的结果示意图如下所示,其中 c2’和 c3’表示散列值改变了。
值得注意的是:
执行 rebase 操作的时候,需要保证 master 分支处于最新状态,否则在 merege 合并的时候也可能存在冲突,就失去使用 rebase 的意义。
千万不要对已经推到远程的内容进行rebase,如果有人拉取远程代码后修改并提交,分支会变得极其麻烦。
了解其基本过程后,我们就可以是用 rebase 命令开始进行合并分支的操作:
在项目中执行 git rebase master,如下所示。因为两次提交都存在冲突,故在 rebase 工作区中需要依次解决这些冲突。
在 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
# 所示
# 两次
# 就可以
# 可以看到
# 的是
# 总会
# 区内
# 等功能
# 如下图
# 一条线
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
什么是JavaScript解构赋值_解构赋值有哪些实用技巧
Android使用GridView实现日历的简单功能
七夕网站制作视频,七夕大促活动怎么报名?
BootStrap整体框架之基础布局组件
如何实现建站之星域名转发设置?
PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】
CSS3怎么给轮播图加过渡动画_transition加transform实现【技巧】
Python图片处理进阶教程_Pillow滤镜与图像增强
Laravel如何使用Livewire构建动态组件?(入门代码)
制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?
Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤
Laravel如何实现文件上传和存储?(本地与S3配置)
Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
如何快速搭建FTP站点实现文件共享?
Laravel如何实现用户注册和登录?(Auth脚手架指南)
Gemini手机端怎么发图片_Gemini手机端发图方法【步骤】
如何在企业微信快速生成手机电脑官网?
香港服务器选型指南:免备案配置与高效建站方案解析
如何在IIS中新建站点并配置端口与物理路径?
今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】
Win11关机界面怎么改_Win11自定义关机画面设置【工具】
iOS验证手机号的正则表达式
如何实现javascript表单验证_正则表达式有哪些实用技巧
QQ浏览器网页版登录入口 个人中心在线进入
bing浏览器学术搜索入口_bing学术文献检索地址
5种Android数据存储方式汇总
如何快速生成专业多端适配建站电话?
Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理
如何快速搭建高效WAP手机网站吸引移动用户?
WEB开发之注册页面验证码倒计时代码的实现
如何快速生成橙子建站落地页链接?
免费视频制作网站,更新又快又好的免费电影网站?
Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
如何快速辨别茅台真假?关键步骤解析
中山网站推广排名,中山信息港登录入口?
如何在VPS电脑上快速搭建网站?
太平洋网站制作公司,网络用语太平洋是什么意思?
品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南
php嵌入式断网后怎么恢复_php检测网络重连并恢复硬件控制【操作】
详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南
如何在阿里云虚拟主机上快速搭建个人网站?
Laravel如何处理文件下载请求?(Response示例)
高端云建站费用究竟需要多少预算?
Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用
浅谈Javascript中的Label语句
Laravel DB事务怎么使用_Laravel数据库事务回滚操作

