这是我参与2022首次更文挑战的第16天,活动详情查看:2022首次更文挑战
前言
今天我们来复习git的分支的知识点,git分支内部的原理和架构你真的了解吗,跟着我一起来看看吧!
分支
前言:
几乎所有的版本控制系统都以某种形式支持分支.使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线.在很多版本控制系统中,这是略微低效的过程--常常需要完全创建一个源代码目录的副本,对于大项目来说,这会耗费很多时间,而Git的分支模型极其的高校轻量,是Git的必杀特性,也正因为这一特性,是的Git从众多版本控制系统中脱颖而出
分支的本质:
Git的分支,其实本质上是提交对象,,所有的分支都有机会被HEAD引用(HEAD一个时刻只会指向一个分支),当我们有新的提交的时候 HEAD会携带当前持有的分支向前移动Git的默认分支名字是master,在多次提交后,你其实已经有一个指向最后那个提交对象的master分支.他会在每次的提交操作中自动向前
注意:Git的"master"分支并不是一个特殊分支.她就跟其他分支完全没有区别.之所以几乎每个仓库都有master分支,是因为
git init命令默认创建它,并且大多数人懒得区改动它分支的原理:
.git/refs目录中保存了分支及其对应的提交对象当运行类似于
git branch (branchname)这样的命令时,Git会取得当前所在分支最新提交对应的SHA-1值,并将其加入你想要创建的任何新分支中当你执行
git branch (branchname)时,Git如何知道最新提交的SHA-1值呢?答案是HEAD文件
HEAD文件是一个符号引用(stmbolic reference),指向目前所在的分支.所谓符号医用,意味着它并不像普通引用那样包含一个SHA-1值.它时一个指向其他引用的指针
1、git branch
git branch(不加参数)
作用:
显示所有分支信息git branch 分支名
作用:
创建分支git branch -v
作用:查看每一个分支最后一次提交
git branch -d(-D强制删除) 分支名
作用:
删除分支,小d需要你这个分支是干净的才能删除(如已合并)git branch --merged
作用:查看那些分支已经合并到当前分支
在这个列表中的分支名字前没有*号的分支通常可以使用
git branch -d删除掉git branch --no-merged
作用:查看所有包含未合并工作的分支
尝试使用
git branch -d命令删除在这个列表中的分支时会失败,如果真的想要删除分支并丢掉哪些工作,可以使用-D选项爱强制删除它git log --oneline --decorate --graph --all
作用:查看所有的分支信息命令
git branch 分支名 commitHash
作用:新建一个分支,并且使分支指向对应的提交对象(版本穿梭
可以替代撤销与重置)
2、git checkout 分支名
作用:
切换分支checkout还有其他作用,后面会提到它会动三个地方:HEAD(指针) 暂存区 工作目录
注意:分支切换会改变你工作目录中的文件,所以在切换分支时,一定要注意你的工作目录里的文件会被改变,如果时切换到一个比较旧的分支,你的工作目录会回复到该分支最后一次提交的样子,如果Git不能干净利落的完成这个任务,它将禁止切换分支
坑:在切换分支时, 如果当前分支上由未暂存的修改(第一次) 或者 有未提交的暂存(第一次) 分支可以切换成功,但是这种操作可能会污染其他分支ps:
第一次--当前分支如果已经提交过一次,将不让你切换,但是第一次没有提交过,git会帮你保存文件 但是它并不知道新增修改是属于哪个分支,所以会带回当前分支最佳操作方式:
每次在切换分支前,需要提交一下当前分支(先使用status查看状态)
3、git checkout -b "新的分支名"
创建并进入该分支,类似于上面两个命令集合
4、模拟实战流程
- 需要解决主程序的的一个小BUG,所以使用
git checkout -b "iss_bug"新建分支并在这个分支进行bug调修- 当你再
iss_bug分支上开发到一半,这时,在主程序发现了一个紧急BUG需要你放下这个重要性为次要的bug进行修改.你老板都给你打了紧急电话,所以你需要先将写到一半的bug进行保存提交(commit提交或者储存 到暂存区,并不是提交合并到主分支,也不是push提交),确定status是干净的时候,切换回主分支,再用第一步的方法创建hot_bug分支(这时候hit_bug的版本是master没有进行iss_bug调修的版本),进行修复- 当你将紧急bug修复后,进行提交,确定status干净后切换回master分支,进行合并:代码如下
git checkout master git merge hit_bug
- 修改完后再查看status(这是个好习惯,防止偶尔记忆混淆造成不必要的麻烦),再切换至普通bug分支
iss_bug进行修改,成功后切换回去合并- 如果出现冲突,去出现冲突的文件手动修改(决定保留那部分代码),再进行
git add表示冲突解决,在进行提交
5、合并分支
命令:
git merge branchname(分支名)注意:合并分支时要先切换到
主要分支(即下面的被合并分支),在这个分支上进行合并新分支,使得这个分支进行版本更新
快进合并-->不会产生冲突
指被合并分支并没有进行修改,停留在原地,只有新分支进行修改更新,更 新完成后进行合并,原版本相当于直接前进版本,称为快进合并
典型合并-->有可能产生冲突
指被合并分支在新分支进行开发时,本身也进行修改开发,可能会改动到同 一代码或者文件而产生重复修改
解决冲突:
打开冲突的文件进行修改 ,修改完成后进行:add标记修改完成,然后commit进行提交
git 在pull或者合并分支的时候有时会遇到一个第一段是黄色,下面文字是青色(偏蓝色)。可以不管(直接下面3,4步),如果要输入解释的话就需要:1.按键盘字母 i 进入insert模式
2.修改最上面那行黄色合并信息,可以不修改
3.按键盘左上角"Esc"
4.输入":wq",注意是冒号+wq,按回车键即可
总结:git分支的知识点不复杂,多加理解,一步步来,加油!