GitHub-分支管理02-BUG与Feature分支

 

参考博文:廖雪峰Git教程

 

1. Bug分支

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

 

1.1. 储藏当前分支代码

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

 1 [root@mini05 zhangtest]# git status 
 2 # On branch dev
 3 # Changes to be committed:
 4 #   (use "git reset HEAD <file>..." to unstage)
 5 #
 6 #    new file:   index.html
 7 #
 8 # Changes not staged for commit:
 9 #   (use "git add <file>..." to update what will be committed)
10 #   (use "git checkout -- <file>..." to discard changes in working directory)
11 #
12 #    modified:   LICENSE
13 #    modified:   README.md
14 #

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

 

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

1 [root@mini05 zhangtest]# git stash  
2 Saved working directory and index state WIP on dev: ef9042a dev brach new
3 HEAD is now at ef9042a dev brach new
4 [root@mini05 zhangtest]# git status  
5 # On branch dev
6 nothing to commit, working directory clean

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

 

1.2. 创建对应BUG的分支并修复

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

 1 [root@mini05 zhangtest]# git checkout master  
 2 Switched to branch 'master'
 3 Your branch is ahead of 'origin/master' by 7 commits.
 4   (use "git push" to publish your local commits)
 5 [root@mini05 zhangtest]# git branch 
 6   dev
 7 * master
 8 [root@mini05 zhangtest]# git checkout -b issue-101
 9 Switched to a new branch 'issue-101'
10 [root@mini05 zhangtest]# git branch 
11   dev
12 * issue-101
13   master

 

       现在修复bug,需要把“Git is free software ...”改为“Git is a free software ...”,然后提交.

 1 [root@mini05 zhangtest]# head -n5 README.md 
 2 # zhangtest
 3 zhangtest
 4 张三
 5 Git is a distributed version control system.
 6 Git is a free software.  # 修改的地方
 7 [root@mini05 zhangtest]# git add README.md
 8 [root@mini05 zhangtest]# git commit -m "fix bug 101"
 9 [issue-101 1987689] fix bug 101
10  1 file changed, 1 insertion(+), 1 deletion(-)

 

1.3. 修复后合并且删除BUG分支

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

 1 [root@mini05 zhangtest]# git checkout master
 2 Switched to branch 'master'
 3 Your branch is ahead of 'origin/master' by 7 commits.
 4   (use "git push" to publish your local commits)
 5 [root@mini05 zhangtest]# git merge --no-ff -m "merged bug fix 101" issue-101  # 合并BUG分支
 6 Merge made by the 'recursive' strategy.
 7  README.md | 2 +-
 8  1 file changed, 1 insertion(+), 1 deletion(-)
 9 [root@mini05 zhangtest]# git branch -d issue-101  # 删除BUG分支
10 Deleted branch issue-101 (was 1987689).
11 [root@mini05 zhangtest]# git branch  # 查看分支信息
12   dev
13 * master

 

1.4. 回到开始的分支并展开工作

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

1 [root@mini05 zhangtest]# git checkout dev
2 Switched to branch 'dev'
3 [root@mini05 zhangtest]# git status
4 # On branch dev
5 nothing to commit, working directory clean

 

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

1 [root@mini05 zhangtest]# git stash list
2 stash@{0}: WIP on dev: ef9042a dev brach new

 

       工作现场还在,Git把stash内容存在某个地方了,但是需要恢复一下,有两个办法:

       一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;

       另一种方式是用git stash pop,恢复的同时把stash内容也删了:

 1 [root@mini05 zhangtest]# git stash pop
 2 # On branch dev
 3 # Changes to be committed:
 4 #   (use "git reset HEAD <file>..." to unstage)
 5 #
 6 #    new file:   index.html
 7 #
 8 # Changes not staged for commit:
 9 #   (use "git add <file>..." to update what will be committed)
10 #   (use "git checkout -- <file>..." to discard changes in working directory)
11 #
12 #    modified:   LICENSE
13 #    modified:   README.md
14 #
15 Dropped refs/stash@{0} (72d4c766f8de0c10e01d85d282130a393c0601fd)

 

       再用git stash list查看,就看不到任何stash内容了:

1 [root@mini05 zhangtest]# git stash list

 

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

1 $ git stash apply stash@{0}

 

 

2. Feature分支

       软件开发中,总有无穷无尽的新的功能要不断添加进来。

       添加一个新功能时,你肯定不希望因为一些实验性质的代码,把主分支搞乱了,所以,每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合并,最后,删除该feature分支。

       现在,你终于接到了一个新任务:开发代号为Vulcan的新功能。

 

2.1. 创建并使用分支

1 [root@mini05 zhangtest]# git branch 
2 * dev
3   master
4 [root@mini05 zhangtest]# git checkout -b feature-vulcan
5 Switched to a new branch 'feature-vulcan'

 

 1 [root@mini05 zhangtest]# cat feature-vulcan.html # 新加文件
 2 <h1>
 3   feature-vulcan
 4 </h1>
 5 [root@mini05 zhangtest]# git add feature-vulcan.html  # 将新文件添加到暂存区
 6 [root@mini05 zhangtest]# git commit -m 'add feature-vulcan' .  # 提交到仓库
 7 [feature-vulcan 239705f] add feature-vulcan
 8  2 files changed, 4 insertions(+)
 9  create mode 100644 feature-vulcan.html
10 [root@mini05 zhangtest]# git status   # 查看状态
11 # On branch feature-vulcan
12 nothing to commit, working directory clean

 

2.2. 如何废弃分支

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

 

       切回dev,准备合并:

1 [root@mini05 zhangtest]# git branch 
2 * dev
3   feature-vulcan
4   master

 

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

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

1 [root@mini05 zhangtest]# git branch -d feature-vulcan
2 error: The branch 'feature-vulcan' is not fully merged.
3 If you are sure you want to delete it, run 'git branch -D feature-vulcan'.

 

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

       现在我们强行删除:

1 [root@mini05 zhangtest]# git branch -D feature-vulcan
2 Deleted branch feature-vulcan (was 239705f).

 

       删除成功!

 

2.3. 小结

       开发一个新feature,最好新建一个分支;

       如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除。

 

posted on 2018-10-03 11:17  踏歌行666  阅读(458)  评论(0编辑  收藏  举报

导航