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

Posted zhanglianghhh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GitHub-分支管理02-BUG与Feature分支相关的知识,希望对你有一定的参考价值。

 

参考博文:廖雪峰Git教程

 

1. Bug分支

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

 

1.1. 储藏当前分支代码

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

 1 [[email protected] 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 [[email protected] 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 [[email protected] 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 [[email protected] 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 [[email protected] zhangtest]# git branch 
 6   dev
 7 * master
 8 [[email protected] zhangtest]# git checkout -b issue-101
 9 Switched to a new branch issue-101
10 [[email protected] zhangtest]# git branch 
11   dev
12 * issue-101
13   master

 

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

 1 [[email protected] 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 [[email protected] zhangtest]# git add README.md
 8 [[email protected] 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 [[email protected] 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 [[email protected] 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 [[email protected] zhangtest]# git branch -d issue-101  # 删除BUG分支
10 Deleted branch issue-101 (was 1987689).
11 [[email protected] zhangtest]# git branch  # 查看分支信息
12   dev
13 * master

 

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

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

1 [[email protected] zhangtest]# git checkout dev
2 Switched to branch dev
3 [[email protected] zhangtest]# git status
4 # On branch dev
5 nothing to commit, working directory clean

 

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

1 [[email protected] zhangtest]# git stash list
2 [email protected]{0}: WIP on dev: ef9042a dev brach new

 

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

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

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

 1 [[email protected] 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/[email protected]{0} (72d4c766f8de0c10e01d85d282130a393c0601fd)

 

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

1 [[email protected] zhangtest]# git stash list

 

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

1 $ git stash apply [email protected]{0}

 

 

2. Feature分支

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

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

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

 

2.1. 创建并使用分支

1 [[email protected] zhangtest]# git branch 
2 * dev
3   master
4 [[email protected] zhangtest]# git checkout -b feature-vulcan
5 Switched to a new branch feature-vulcan

 

 1 [[email protected] zhangtest]# cat feature-vulcan.html # 新加文件
 2 <h1>
 3   feature-vulcan
 4 </h1>
 5 [[email protected] zhangtest]# git add feature-vulcan.html  # 将新文件添加到暂存区
 6 [[email protected] 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 [[email protected] zhangtest]# git status   # 查看状态
11 # On branch feature-vulcan
12 nothing to commit, working directory clean

 

2.2. 如何废弃分支

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

 

       切回dev,准备合并:

1 [[email protected] zhangtest]# git branch 
2 * dev
3   feature-vulcan
4   master

 

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

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

1 [[email protected] 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 [[email protected] zhangtest]# git branch -D feature-vulcan
2 Deleted branch feature-vulcan (was 239705f).

 

       删除成功!

 

2.3. 小结

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

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

 

以上是关于GitHub-分支管理02-BUG与Feature分支的主要内容,如果未能解决你的问题,请参考以下文章

github入门之分支操作--5

GitGit 分支管理 ( 解决分支合并冲突 | 创建并切换分支 git switch -c feature1 | 修改 feature1 分支并提交 | 修改 master 主版本并提交 )(代码片

GitGit 分支管理 ( 解决分支合并冲突 | 创建并切换分支 git switch -c feature1 | 修改 feature1 分支并提交 | 修改 master 主版本并提交 )(代码片

如何在 Github Actions 中获取当前分支?

GitGit 分支管理 ( 解决分支合并冲突 | 前置环境准备 | 远程仓库发起分支合并 | 在远程仓库解决分支冲突 | 在远程仓库正式合并分支版本 )

GitGit 分支管理 ( 解决分支合并冲突 | 前置环境准备 | 远程仓库发起分支合并 | 在远程仓库解决分支冲突 | 在远程仓库正式合并分支版本 )