git分支知识点详解

347 阅读6分钟

这是我参与2022首次更文挑战的第16天,活动详情查看:2022首次更文挑战

前言

今天我们来复习git的分支的知识点,git分支内部的原理和架构你真的了解吗,跟着我一起来看看吧!

分支

  1. 前言:

    几乎所有的版本控制系统都以某种形式支持分支.使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线.在很多版本控制系统中,这是略微低效的过程--常常需要完全创建一个源代码目录的副本,对于大项目来说,这会耗费很多时间,而Git的分支模型极其的高校轻量,是Git的必杀特性,也正因为这一特性,是的Git从众多版本控制系统中脱颖而出

  2. 分支的本质:

    Git的分支,其实本质上是提交对象,,所有的分支都有机会被HEAD引用(HEAD一个时刻只会指向一个分支),当我们有新的提交的时候 HEAD会携带当前持有的分支向前移动

    Git的默认分支名字是master,在多次提交后,你其实已经有一个指向最后那个提交对象的master分支.他会在每次的提交操作中自动向前

    注意:Git的"master"分支并不是一个特殊分支.她就跟其他分支完全没有区别.之所以几乎每个仓库都有master分支,是因为git init命令默认创建它,并且大多数人懒得区改动它

  3. 分支的原理:

    1. .git/refs目录中保存了分支及其对应的提交对象

    2. 当运行类似于git branch (branchname)这样的命令时,Git会取得当前所在分支最新提交对应的SHA-1值,并将其加入你想要创建的任何新分支中

    3. 当你执行git branch (branchname)时,Git如何知道最新提交的SHA-1值呢?答案是HEAD文件

      HEAD文件是一个符号引用(stmbolic reference),指向目前所在的分支.所谓符号医用,意味着它并不像普通引用那样包含一个SHA-1值.它时一个指向其他引用的指针

1、git branch

  1. git branch(不加参数)

    作用:显示所有分支信息

  2. git branch 分支名

    作用:创建分支

  3. git branch -v

    作用:查看每一个分支最后一次提交

  4. git branch -d(-D强制删除) 分支名

    作用:删除分支,小d需要你这个分支是干净的才能删除(如已合并)

  5. git branch --merged

    作用:查看那些分支已经合并到当前分支

    在这个列表中的分支名字前没有*号的分支通常可以使用git branch -d 删除掉

  6. git branch --no-merged

    作用:查看所有包含未合并工作的分支

    尝试使用git branch -d命令删除在这个列表中的分支时会失败,如果真的想要删除分支并丢掉哪些工作,可以使用-D 选项爱强制删除它

  7. git log --oneline --decorate --graph --all

    作用:查看所有的分支信息命令

  8. git branch 分支名 commitHash

    作用:新建一个分支,并且使分支指向对应的提交对象(版本穿梭可以替代撤销与重置)

2、git checkout 分支名

作用:切换分支 checkout还有其他作用,后面会提到

它会动三个地方:HEAD(指针) 暂存区 工作目录

  1. 注意:分支切换会改变你工作目录中的文件,所以在切换分支时,一定要注意你的工作目录里的文件会被改变,如果时切换到一个比较旧的分支,你的工作目录会回复到该分支最后一次提交的样子,如果Git不能干净利落的完成这个任务,它将禁止切换分支

  2. :在切换分支时, 如果当前分支上由未暂存的修改(第一次) 或者 有未提交的暂存(第一次) 分支可以切换成功,但是这种操作可能会污染其他分支

    ps:第一次--当前分支如果已经提交过一次,将不让你切换,但是第一次没有提交过,git会帮你保存文件 但是它并不知道新增修改是属于哪个分支,所以会带回当前分支

  3. 最佳操作方式:每次在切换分支前,需要提交一下当前分支(先使用status查看状态)

3、git checkout -b "新的分支名"

创建并进入该分支,类似于上面两个命令集合

4、模拟实战流程

  1. 需要解决主程序的的一个小BUG,所以使用git checkout -b "iss_bug"新建分支并在这个分支进行bug调修
  2. 当你再iss_bug分支上开发到一半,这时,在主程序发现了一个紧急BUG需要你放下这个重要性为次要的bug进行修改.你老板都给你打了紧急电话,所以你需要先将写到一半的bug进行保存提交(commit提交或者储存 到暂存区,并不是提交合并到主分支,也不是push提交),确定status是干净的时候,切换回主分支,再用第一步的方法创建hot_bug分支(这时候hit_bug的版本是master没有进行iss_bug调修的版本),进行修复
  3. 当你将紧急bug修复后,进行提交,确定status干净后切换回master分支,进行合并:代码如下
git checkout master
git merge hit_bug
  1. 修改完后再查看status(这是个好习惯,防止偶尔记忆混淆造成不必要的麻烦),再切换至普通bug分支iss_bug进行修改,成功后切换回去合并
  2. 如果出现冲突,去出现冲突的文件手动修改(决定保留那部分代码),再进行git add表示冲突解决,在进行提交

5、合并分支

命令: git merge branchname(分支名)

注意:合并分支时要先切换到主要分支(即下面的被合并分支),在这个分支上进行合并新分支,使得这个分支进行版本更新

  1. 快进合并-->不会产生冲突

    指被合并分支并没有进行修改,停留在原地,只有新分支进行修改更新,更 新完成后进行合并,原版本相当于直接前进版本,称为快进合并

  2. 典型合并-->有可能产生冲突

    指被合并分支在新分支进行开发时,本身也进行修改开发,可能会改动到同 一代码或者文件而产生重复修改

  3. 解决冲突:打开冲突的文件 进行修改 ,修改完成后进行:add标记修改完成,然后commit进行提交

git 在pull或者合并分支的时候有时会遇到一个第一段是黄色,下面文字是青色(偏蓝色)。可以不管(直接下面3,4步),如果要输入解释的话就需要:

1.按键盘字母 i 进入insert模式

2.修改最上面那行黄色合并信息,可以不修改

3.按键盘左上角"Esc"

4.输入":wq",注意是冒号+wq,按回车键即可

总结:git分支的知识点不复杂,多加理解,一步步来,加油!