文章目录
- 分支策略
- bug分支-master分支出现bug怎么办
- 删除临时分⽀
- 小结
分支策略
在实际开发中,我们应该按照⼏个基本原则进⾏分⽀管理:
1.master分⽀应该是⾮常稳定的,也就是仅⽤来发布新版本,平时不能在上⾯⼲活
2.⼲活都在dev分⽀上,也就是说,dev分⽀是不稳定的,到某个时候,⽐如1.0版本发布时,再把dev分⽀合并到master上,在master分⽀发布1.0版本
3.你和你的⼩伙伴们每个⼈都在dev分⽀上⼲活,每个⼈都有⾃⼰的分⽀,时不时地往dev分⽀上合并就可以了
团队合作的分⽀看起来就像这样
bug分支-master分支出现bug怎么办
假设目前正在dev分支进行开发,开发到⼀半,突然发现master分支上有bug需要解决,在Git中,每个bug都可以通过⼀个新的临时分⽀来修复,修复后,合并分⽀,然后将临时分⽀删除。但是此时dev分支的代码在工作区开发了一半还无法提交,此时怎么办?
git stash命令:将当前的⼯作区信息进⾏储藏,被储藏的内容可以在将来某个时间恢复出来
案例步骤:
1°:在dev分支上的代码在工作区开发了一半,发现master上有bug,此时使用git stash
命令,将当前的⼯作区信息进⾏储藏,此时用git status
查看工作区,发现就是干净的!除⾮有没有被Git管理的⽂件,因此可以放⼼地创建分⽀来修复bug
2°:储藏dev工作区之后,由于我们要基于master分⽀修复bug,所以切回到master分支上,再进行新建临时分支来修复bug
3°:修复完成后,切换到master分支上,并完成合并,最后删除临时分支。bug的修复⼯作已经做完了,我们还要继续切回到dev分支进行开发,首先查看工作现场,然后恢复现场,再次查看的时候,我们已经发现已经没有现场可以恢复了。
git stash list:查看工作现场,git stash pop:恢复现场,恢复现场的同时会把stash也删了
git stash apply也可以恢复现场,但是恢复现场后stash的内容并不删除,此时需要使用 git stash drop来删除stash
可以进行多次stash,恢复的时候:先使用git stash list
查看工作现场,然后使用指令:git stash apply stash@{序号}:恢复指定的stash
4°:恢复完代码之后我们便可以继续完成开发,开发完成后便可以进⾏提交。但是此时修复bug的内容,并没有在dev分支上显示,此时的状态图如下:
5°:此时master 分⽀⽬前最新的提交要领先于【新建dev分支时候,基于的master分支的提交】,所以我们再dev当中看不到修复bug的代码,但是最终目的是要让master分支合并dev分支,正常情况下我们切回master分支直接合并,但是这样其实是有⼀定⻛险的
- 因为在合并分⽀时可能会有冲突,⽽代码冲突需要我们⼿动解决,如果按照上述的方式,此时要在master分支上解决
- 我们⽆法保证对于冲突问题可以正确地⼀次性解决掉,因为在实际的项⽬中,代码冲突不只⼀两⾏那么简单,
有可能⼏⼗上百⾏,甚⾄更多,解决的过程中难免⼿误出错,导致错误的代码被合并到master当中
此时的状态为:
建议使用的方法:在⾃⼰的分⽀上(dev分支)合并master,再让master去合并dev分支,这样做的目的是:如果有冲突可以在本地分⽀上解决并进⾏测试,而不会影响master分支。此时的状态为:
上述图是禁用Fast forward
模式得出的,主要是为了方便解释问题
删除临时分⽀
软件开发中,总有⽆穷⽆尽的新的功能要不断添加进来。添加⼀个新功能时,肯定不希望因为⼀些实验性质的代码,把主分⽀搞乱了,所以,每添加⼀个新功能,最好新建⼀个分⽀,我们可以将其称之为feature分⽀,在上⾯开发,完成后进行合并,最后删除该feature分⽀。
但是,如果正在feature分支上开发了一半,被产品经理突然叫停,说是要停⽌新功能的开发。虽然⽩⼲了,但是这个分支还是必须就地销毁!这时使⽤传统的 git branch -d
命令进行删除是不行的
删除临时分支:git branch -D 分支名,之前的是合并分支之后再删除 || 没有进行过提交的分支,所以可以使用git branch -d 分支名
进行删除该分支
案例演示:
1°:创建并切换到dev3分支,在dev3分支上开发新功能,并进行提交
2°:新功能叫停,不做了!
3°:切换到master分支上准备删除dev3分支,常规使用git branch -d 分支名
删除是失败的!此时需要使用git branch -D 分支名
进行删除
小结
分⽀在实际中有什么⽤呢
1.假设你准备开发⼀个新功能,但是需要两周才能完成,第⼀周你写了50%的代码,如果⽴刻提交,由于代码还没写完,不完整的代码库会导致别⼈不能⼲活了。如果等代码全部写完再⼀次提交,⼜存在丢失每天进度的巨⼤⻛险。
2.有了分支之后:创建了⼀个属于你⾃⼰的分⽀,别⼈看不到,还继续在原来的分⽀上正常⼯作,⽽你在⾃⼰的分⽀上⼲活,想提交就提交,直到开发完毕后,再⼀次性合并到原来的分⽀上,这样,既安全,⼜不影响别⼈⼯作
3.并且Git⽆论创建、切换和删除分⽀,Git在1秒钟之内就能完成!⽆论你的版本库是1个⽂件还是1万个⽂件