git之分支管理

一.理解分支

我们看下面这张图片:

在版本回退⾥,你已经知道,每次提交,Git都把它们串成⼀条时间线,这条时间线就可以理解为是⼀个分⽀。截⽌到⽬前,只有⼀条时间线,在Git⾥,这个分⽀叫主分⽀,即master分⽀

HEAD严格来说不是指向提交,⽽是指向master,master才是指向提交的,所以,HEAD指向的就是当前分⽀
 

二.创建分⽀

这里我们又要开始指令的学习了。

git branch 查看当前本地所有分⽀

如图:

git branch +name;//表示创建分支

我们这里就先创建dev1分支

注意:*表示为当前HEAD指向的分支

如图,我们可以发现master和dev1的指向相同,如图所示:

三.切换分⽀

git checkout +分支名;

下面我们切换到dev1分支:

*号在dev1上了,我们切换成功。

如图:

下面我们在dev1分支上新写一行内容,然后提交:

我们返回master分支,cat test文件:

发现没有新加的内容,如下图:

四.合并分⽀

为了在master主分⽀上能看到新的提交,就需要将 dev1 分⽀合并到 master 分⽀,操作如下:


 

我们用:

git merge +分支名//表示将分支合并到当前HEAD所在分支上

补充:

Fast-forward代表“快进模式”,也就是直接把master指向dev1的当前提交,所以合并速度⾮常快
 

五.删除分⽀

合并完成后,dev1分⽀对于我们来说就没⽤了,那么dev1分⽀就可以被删除掉

注意点:

1.如果当前正处于某分⽀下,就不能删除当前分⽀

2.如果该分支未进行过合并,不能用该指令删除
 

git branch -d +分支名;删除某分支

操作如下:

六.合并冲突

在实际分⽀合并的时候,并不是想合并就能合并成功的,有时候可能会遇到代码冲突的问题
补充知识;

git checkout -b +分支名;
//表示git branch +分支名 +git checkout +分支名

为了演示该操作,我们新建dev2分支,然后再dev2分支第一行后面+aaa,在master分支test文件第一行+bbb:

新建dev2分支,然后再dev2分支第一行后面+aaa:

在master分支test文件第一行+bbb:

现在情况如下图:

如果我们现在在master分支上合并:

就会出现以下错误

打开test文件,进行适当人为修改:

假如我们是要aaa,修改结果如下:

修改完成之后,我们需要再次提交即可,操作如下:

补充知识:

git log:
git log --graph --abbrev-commit;//表示视图查看修改情况

七.分⽀管理策略

通常合并分⽀时,如果可能,Git会采⽤ Fast forward 模式。还记得如果我们采⽤ Fast forward 模式之后,形成的合并结果是什么呢?

在Fast forward 模式下,删除分⽀后,查看分⽀历史时,会丢掉分⽀信息,看不出来最新提
交到底是merge进来的还是正常提交的。
但在合并冲突部分,我们也看到通过解决冲突问题,会再进⾏⼀次新的提交,该好处是,从分⽀历史上就可以看出分⽀信息。例如我们现在已经删除了在合并冲突部分创建的 dev2 分⽀,但依旧能看到master其实是由其他分⽀合并得到

 

Git⽀持我们强制禁⽤ Fast forward 模式,那么就会在merge时⽣成⼀个新的 commit ,这样,
从分⽀历史上就可以看出分⽀信息
指令:(举例)

git merge --no-ff -m "merge with no-ff" dev2

--no-ff 参数,表⽰禁⽤ Fast forward 模式。禁⽤ Fast forward 模式后合并会创建⼀个新的 commit ,所以加上 -m 参数,把描述写进去
 

所以在合并分⽀时,加上 --no-ff 参数就可以⽤普通模式合并,合并后的历史有分⽀,能看出来曾
经做过合并,⽽ fast forward 合并就看不出来曾经做过合并

 

八.分⽀策略

在实际开发中,我们应该按照⼏个基本原则进⾏分⽀管理:
1.master分⽀应该是⾮常稳定的,也就是仅⽤来发布新版本,平时不能在上⾯⼲活

2.dev分⽀是不稳定的,到某个时候,⽐如1.0版本发布时,再把dev分⽀合并到master上,在master分⽀发布1.0版本
 

九.bug分⽀

假如我们现在正在dev3分⽀上进⾏开发,开发到⼀半,突然发现 master 分⽀上⾯有bug,需要
解决。在Git中,每个bug都可以通过⼀个新的临时分⽀来修复,修复后,合并分⽀,然后将临时分⽀删除。
可现在 dev3的代码在⼯作区中开发了⼀半,还⽆法提交,怎么办?

 

git stash;
//将当前的⼯作区信息进⾏储藏,被储藏的内容可以在将来某个时间恢复出来

现在我们发现master分支存在问题,接下来我们要进行如下操作;

第一步:保存当前内容(注意:内容是在工作区未git add的)

第二步:回到master分支,然后新建修改分支,进行修改

第三步:将修改版本合并到master版本

第四步:回到dev3得到之前内容,继续工作

git stash list;
//查看stash中内容
git stash pop;
//恢复工作区
git stash apply stash@{0};
//恢复指定的stash
git stash apply;
//恢复工作区,但是stash中还有内容
git stash drop
//来删除stash中内容

第五步:dev3完成之后先将master合并到dev3上,在将dev3合并到master上(重点)

十.删除临时分⽀

指的是删除分支中的注意点2:该分支未进行过合并,不能用git branch -d删除

我们此时可以用-D强制删除

git branch -D +分支名

分支作用总结:

分⽀在实际中有什么⽤呢?假设你准备开发⼀个新功能,但是需要两周才能完成,第⼀周你写了50%的代码,如果⽴刻提交,由于代码还没写完,不完整的代码库会导致别⼈不能⼲活了。如果等代码全部写完再⼀次提交,⼜存在丢失每天进度的巨⼤⻛险。现在有了分⽀,就不⽤怕了。你创建了⼀个属于你⾃⼰的分⽀,别⼈看不到,还继续在原来的分⽀上正常⼯作,⽽你在⾃⼰的分⽀上⼲活,想提交就提交,直到开发完毕后,再⼀次性合并到原来的分⽀上,这样,既安全,⼜不影响别⼈⼯作。并且Git⽆论创建、切换和删除分⽀,Git在1秒钟之内就能完成!⽆论你的版本库是1个⽂件还是1万个⽂件
 

追后,感谢大家的支持 !!!

  • 14
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jiaofi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值