git的分支管理(详细版)

git的分支管理

git所有分支之间彼此互不干扰,各自完成各自的工作和内容。可以在分支使用完后合并到总分支(原分支) 上,安全、便捷、不影响其他分支工作

查看当前工作在那个分支

git branch
# 返回
# * master

可以看到当前的分支叫 "master"

master分支

从项目创建之初,有且唯一的分支就是主分支。如果之后再创建分支,就是一个一个的从分支,主分支被叫做master

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

HEAD

这里提个问题。对一个项目提交了很多个分支,如果有两个分支指向相同提交历史,Git 又是怎么知道当前在哪一个分支上呢?

很简单,它有一个名为 HEAD 的特殊指针。 请注意它和许多其它版本控制系统(如 Subversion 或 CVS)里的 HEAD 概念完全不同。 在 Git 中,它是一个指针,指向当前所在的本地分支(译注:将 HEAD 想象为当前分支的别名)。

而HEAD所指向的直接关系是当前分支,再找到分支的版本。如下图:

在这里插入图片描述

创建新分支

概念解释

git创建新分支。即在当前位置创建一个指针,比如起名为 从分支dev,然后将HEAD指向dev。如下图:

  1. 分支创建好后的提交都是在dev分支上提交,而之前的总提交master分支的提交位置停留在创建从分支dev的位置。而HEAD会跟随新创建的分支,跟随每一次提交不停的先前移动。保持HEAD指针的在提交的最前沿。
  2. master上新创建的dev分支会继承master分支的所有提交,通过 git log 可以看出来。

在这里插入图片描述
在这里插入图片描述

实地操作
# 创建并切换到dev分支
git checkout -b dev

此时就会有两个分支,并且指向 dev分支

在这里插入图片描述

提交分支

dev分支工作完成,需要合并到master分支的时候,也只是将master指针指向当前dev的位置,并将HEAD指向master,这时dev分支可以直接删除,也可以不删除,删除的话也只是移除了dev指针,只留下一个master指针,对工作区没有任何的影响,也就是曾经做的所有提交操作都不会有影响。
在这里插入图片描述

切换回主分支

# 分支切换回主分支master
git checkout master

合并分支

当分支切换回主分支的时候,可以将dev的修改提交合并到master分支上,使用:

# 合并dev到master
git merge dev

重点:

这一次的合并称之为快速合并 fast-forward。只是将master的指针指向了dev最后一次提交的位置。

当分支切换回主分支master的时候,就可以删除dev分支使用:

# 删除dev分支
git branch -d dev

小结:

查看分支:git branch

创建分支:git branch <name>

切换分支:git checkout <name>

创建+切换分支:git checkout -b <name>

合并某分支到当前分支:git merge <name>

删除分支:git breach -d <name>

冲突的发生和解决

当同一个文件被两个分支都修改过,想要合并两个分支就会产生冲突,不能快速将dev合并到master上。并且git会提醒“合并过程中产生了冲突,请修正后再提交”。

在这里插入图片描述

修正的过程:

  1. 将两个分支的文件,进行对比修改,满足两个分支的提交。
  2. 使用 git add 和git commit 进行一次新的提交。(此时提交的是master分支)
  3. 再次合并
    在这里插入图片描述

查看带有冲突解决的日志

git log --graph -- pretty=oneline

分支管理策略

通常,合并分支时,如果没有冲突,并且分支是单向一条线路继承下来的,git会使用 fast forword 模式,但是有些快速合并不能成功,但是又没有冲突时,就会触发分支管理策略,git会自动做一次新的提交。

当两个分支对工作区都进行了修改,但是修改的并不是同一个文件,而是两个不同的文件,也就是不会产生冲突。此时合并的时候,不能使用**“快速合并”**,就会弹框需要你输入一段合并说明。使用快捷键 ctrl+x 退出

合并时禁止快速合并模式

# 合并dev到master,禁止快速合并模式,同时添加说明
git merge --no-ff -m '' dev

bug分支

描述和说明

使用场景:当在某个分支上正在工作,突然有一个紧急的bug需要修复,此时可以使用 stash功能,将当前正在工作的现场存储起来,等bug修复之后,在返回继续工作。

操作顺序:

  1. 将当前的工作现场临时存储

    # 对当前现场进行存储
    git stash
    
  2. 切换到bug出现的分支上,比如bug出现在 master分支。如果bug就是在当前分支,可以操作此步骤

    git checkout master
    
  3. 新添加一个bug临时分支

    git checkout -b bug001
    
  4. 对代码进行修复。

  5. 切换回master分支

    git checkout master
    
  6. 合并bug分支到主master上

    git merge --no-ff -m '合并bug分支到master' bug001
    
  7. 删除bug001分支

    git branch -d bug001
    
  8. 回到之前的工作现场所在的分支

    git checkout dev
    
  9. 查看当前分支保存那些工作现场(之前封冻存储的工作现场)

    git stash list
    
  10. 恢复存储的现场

    git stash pop
    

小结:

修复bug时,通过创建新的bug分支进行修复,然后合并,最后删除。

当手头工作没有做完时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,恢复工作现场。

  • 61
    点赞
  • 330
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值