Bug 分支

软件开发中,bug无处不在。有了bug就需要修复,在Git中,由于分支是如此的强大,所以,每个bug都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除。

当你接到一个代号101的bug的任务需要修复时,很自然地,你想创建一个分支 issue-101 来修复它,但是,等等,当前正在分支 dev 上进行的工作还没有提交,如下:

并不是你不想提交,而是工作只进行到一半,还没法提交,预计完成还需1天时间。但是,必须在两个小时内修复该bug,怎么办?

幸好,Git 还提供了一个 stash 功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作,如下git stash 命令

现在,用 git status 查看工作区,就是干净的(除非有没有被Git管理的文件),因此可以放心地创建分支来修复bug。

首先确定要在哪个分支上修复bug,假定需要在 master 分支上修复Bug,就从 master 创建临时分支,如下:

现在修复bug,手动把文件 readme.txt 里的内容 “ one two three ” 删除,如下:

然后添加、提交:

修复完成后,切换到 master 分支,并完成合并,最后删除 issue-101 分支,如下:

太棒了,原计划两个小时的bug修复只花了5分钟!现在,是时候接着回到dev分支干活了!

工作区是干净的,刚才的工作现场存到哪去了?用 git stash list 命令看看,如下:

工作现场还在,Git把stash内容存在某个地方了,但是需要恢复一下,有两个办法:
            
一是用 git stash apply 恢复,但是恢复后,stash内容并不删除,你需要用 git stash drop 来删除;
            
二是用 git stash pop ,恢复的同时把stash内容(贮藏现场记录)也删了,如下:

再用 git stash list 查看,就看不到任何 stash  内容 了,如下:(没有任何贮藏工作现场的记录了)

你可以多次stash,恢复的时候,先用 git stash list  查看,然后恢复指定的stash,用命令,如下:

$ git stash apply stash@{0}

小结:

1、修复bug时,我们会通过创建新的分支进行修复bug,然后合并新分支,最后删除新的分支;
2、当手头工作没有完成时,先把工作现场贮藏一下通过命令  git stash ,然后去修复bug,修复后,再 git stash pop,回到工作现场。


                                                                 feature 分支

软件开发中,总有无穷无尽的新的功能要不断添加进来。
添加一个新功能时,你肯定不希望因为一些实验性质的代码,把主分支搞乱了,所以,每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合并,最后,删除该feature分支。
            
现在,你终于接到了一个新任务:开发代号为Vulcan的新功能,该功能计划用于AR社交。于是准备开发,创建并切换到新的分支,如下:

5分钟后,开发完毕:

切回分支 dev,准备合并 git merge ,如下:

一切顺利的话,feature分支和bug分支是类似的,合并,然后删除。

但是!就在此时,接到上级命令,因经费不足,新功能必须取消!

虽然白干了,但是这个包含机密资料的分支还是必须就地销毁,如下:

error: The branch 'feature-vulcan' is not fully merged。表示:错误:分支“feature-vulcan”没有完全合并。

If you are sure you want to delete it, run 'git branch -D feature-vulcan'。表示: 如果您确定要删除它,请运行“git分支-D feature-vulcan”。

销毁失败。Git友情提醒,feature-vulcan分支还没有被合并,如果删除,将丢失掉修改,如果要强行删除,需要使用大写的-D参数。

现在我们强行删除,如下:

小结:

1、开发一个新的功能,最好新建一个分支feature,再作开发;
            
2、如果要丢弃一个没有被合并过的分支,可以通过命令 git branch -D <name> 强行删除。


转自:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐