• 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 +分支名;删除某分支

    操作如下:

    六.合并冲突

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

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

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

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

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

    现在情况如下图:

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

    就会出现以下错误

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

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

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

    补充知识:

    1. git log:
    2. 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的代码在⼯作区中开发了⼀半,还⽆法提交,怎么办?

     

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

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

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

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

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

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

    1. git stash list;
    2. //查看stash中内容
    3. git stash pop;
    4. //恢复工作区
    5. git stash apply stash@{0};
    6. //恢复指定的stash
    7. git stash apply;
    8. //恢复工作区,但是stash中还有内容
    9. git stash drop
    10. //来删除stash中内容

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

    十.删除临时分⽀

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

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

    git branch -D +分支名

    分支作用总结:

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

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

  • 相关阅读:
    【C++】——动态内存管理
    BUU [HCTF 2018]Hideandseek
    网络协议:TCP三次握手与四次挥手
    【HarmonyOS】元服务服务卡片网络开发
    十一、组合API(3)
    OpenLayers实战,WebGL图层根据Feature要素的变量动态渲染多种颜色和不同直径大小的圆形和圆点图形,适用于大量圆形圆点渲染不同颜色不同大小
    使用selenium用xpath获取页面元素遇到的bug以及解决办法
    【Autosar RTM】
    吊灯需要做哪些检测认证
    热腾腾的大厂面试总结,想进大厂的必看!
  • 原文地址:https://blog.csdn.net/2301_79813267/article/details/136286544