当前位置: 首页 > news >正文

Git版本管理系列:(二)多分支操作

目录

  • 分支的查看、创建、切换、删除
  • 分支合并
    • merge方法
    • 变基rebase
  • 语法总结

前面学习了单分支下git的各种用法,但在实际的版本控制中我们往往面临的是多分支的开发状况。例如你想为现有的程序(B)开发不同的功能,如果只有一个分支的话各个功能的开发只能串行进行,例如开发完了功能A,再在(B+A)的基础上开发功能C,如果功能C开发失败,势必会影响到前面的(B+A),如果使用分支的话就不会出现这种问题。另一种情况是你在和别人合作开发代码时,两个人应该要在基础版本上开辟两条分支分别进行开发,最后再将这两条分支合并到主分支中。

分支的查看、创建、切换、删除

  1. 创建分支:git branch <branchname> 即可在当前分支的最新一次提交版的基础上创建一个分支。
  2. 基于某个提交版创建分支:git branch <branchname> <commit_id>
  3. 查看分支git branch即可查看所有的分支,并且使用*指示当前在哪个分支上。
  4. 查看分支图git log --graph --oneline --decorate --all其中–graph:显示分支和合并的图形化结构‌,–oneline:简化提交信息为单行显示‌,–decorate:显示分支和标签名称‌,–all:包含所有分支(本地和远程)‌。
  5. 切换分支:git checkout <branchname>/git switch <branchname>(推荐使用),注意checkout还有恢复工作区的功能:git checkout -- <filename>,因此分支的切换以及创建+切换都推荐使用switch
  6. 创建并切换分支:git checkout -b <branchname>/git switch -c <branchname>(推荐)

这里插一句话:切换分支前一定要将当前工作区中未提交的代码进行提交,因为切换相当于要丢失当前工作区与暂存区内容,加载指定分支的工作区与暂存区

  1. 删除分支(已合并):git branch -d <branchname>已经合并的分支作用不大。
  2. 删除分支(未合并)git branch -D <branchname>为合并的分支的删除需要谨慎,使用大写D进行强制删除。

分支合并

merge方法

 merge叫融合,具体操作步骤如下:

  1. 切换到主分支git switch <main_branch_name>
  2. 运行git merge <feature_branch_name>,将子分支的内容合并到主分支内。
  3. 解决冲突。以上两个步骤后,如果有冲突(即同一个文件相同的代码位置上主分支和子分支有不同的语句(最常见)、子分支中多出来了主分支中屏蔽的文件,诸如此类)需要解决冲突,没有冲突(例如子分支只是增加了一些主分支中没有的东西)会自动合并完成。使用git status 来查看冲突内容

主要介绍一下代码冲突的表现形式:
有代码冲突的地方会被替换成如下内容:
<<<<<<< HEAD
当前分支的代码
=======
要合并的分支的代码
>>>>>>> branch-name
需要手动修改合并上面的代码,最后留下一句可执行的代码

  1. 执行merge就相当于自动更新了工作区,需要使用git add . 以及git commit 来完成合并工作

变基rebase

 变基操作也是合并分支的一种方法,即将一个分支整体移动到另一个分支上。rebase操作的原理就是找到两个分支共同的节点,再将此节点之后的待变分支移动到基分支的最新提交后面,这就是所谓的变基,并且不同与merge分支会保留,变基操作后待变分支会消失,两个分支变成一个。
rebase语法为:git rebase [基分支] [待变分支],也可以简写为git rebase [基分支] ,此时默认待变分支为当前所在的分支。
 rebase相比merge不会产生新的提交,可以简化项目的分支结构。但说实话rebase使用频率相比merge低一些,新手掌握merge就够用。只有当项目分支特别多特别繁杂时才有可能用rebase进行简化,并且也只会在一个支线分支上(一般也只有一个开发者)进行rebase,支线和主线的代码融合仍然是使用merge更好。
在这里插入图片描述
执行git rebase master bypass。将bypass变基到master上,变基础的过程是先将bypass分支的第一个提交版本即上图的bypass1添加到master的提交五上,此时需要解决冲突,并执行git rebase --continue,继续下一条变基操作:即将bypass分支的第二个提交版本bypass2添加到master最新的提交上(也就是前面五和bypass1合并的版本即下图rebass记录),commit后变成rebase2。此时提示变基已完成,可以看到仓库分支情况如下,原本两条分支变成了一条。rebase需要逐个continue才能完成最终的变基,不必continue一次提交一次,可以等全部continue完再提交
在这里插入图片描述

语法总结

1. git branch #查看分支
2. git log --graph --oneline #查看提交记录组成的分支图
3. git branch <branchname> #创建分支
4. git checkout <branchname> #切换分支
5. git checkout -b <branchname> #创建并切换到分支
6. git switch <branchname> #切换分支
7. git switch -c <branchname> #创建并切换到分支
8. git branch -d <branchname> #删除已合并的分支
9. git branch -D <branchname> #删除未合并的分支
10. git merge <branchname> #将branchname分支合并到当前分支
11. git rebase <基分支> <待变分支>
http://www.dtcms.com/a/122272.html

相关文章:

  • 数据结构与算法-图论-复习2(差分约束,强连通分量,二分图,LCA,拓扑排序,欧拉路径和欧拉回路)
  • 使用stream的Collectors.toMap()方法常见问题
  • 数字电子技术基础(四十一)——数据选择器
  • 【Python教程】Python爬虫代码实现Java核心数据整理
  • python 如何安装wxpython
  • Meta 最新 AI 模型系列 ——Llama 4
  • COM通信 - TJA1145收发器
  • 数字图像处理作业2
  • 【回眸】Linux 内核 (十六) 之 多线程编程 下
  • 基于Python的心衰疾病数据可视化分析系统
  • 【论文精读】Multi-scale Neighbourhood Feature Interaction Network
  • JavaScript Hook JSON.stringify和JSON.parse:逆向与修改实战指南
  • AWS弹性容器服务(AWS Elastic Container Service,ECS)概述
  • js中this指向问题
  • deque容器
  • 排序算法(快速排序,选择排序......)【泪光2929】
  • FPGA_modelsim错误总结
  • 一、简单的 Django 服务
  • 软考 系统架构设计师系列知识点 —— 设计模式之工厂模式
  • 518. Coin Change II
  • React中使用dnd-kit实现拖拽排序
  • ASP Response
  • 分布式存储系统Ceph
  • 微信小程序:动态表格实现,表头单元格数据完全从data中获取,宽度自定义,自定义文本框,行勾选,样式效果,横向滚动表格(解决背景色不足的问题)等
  • TCP重传率高与传输延迟问题
  • 【scikit-learn基础】--『数据加载』之外部数据集
  • pip install pytrec_eval失败的解决方案
  • 自动变为 VIP 文章
  • python基础语法11-文件读写
  • 程序代码篇---时间复杂度空间复杂度