欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

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

程序员文章站 2023-11-21 14:03:22
参考博文:廖雪峰Git教程 1. Bug分支 软件开发中,bug就像家常便饭一样。有了bug就需要修复,在Git中,由于分支是如此的强大,所以,每个bug都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除。 1.1. 储藏当前分支代码 当你接到一个修复一个代号101的bug的任务 ......

 

参考博文:廖雪峰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>强行删除。