前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >GitHub-分支管理02-BUG与Feature分支

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

作者头像
踏歌行
发布2020-10-15 11:44:47
4680
发布2020-10-15 11:44:47
举报
文章被收录于专栏:踏歌行的专栏

参考博文:廖雪峰Git教程

1. Bug分支

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

1.1. 储藏当前分支代码

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

代码语言:javascript
复制
 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功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作:

代码语言:javascript
复制
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创建临时分支:

代码语言:javascript
复制
 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 ...”,然后提交.

代码语言:javascript
复制
 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分支:

代码语言:javascript
复制
 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分支干活了!

代码语言:javascript
复制
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命令看看:

代码语言:javascript
复制
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内容也删了:

代码语言:javascript
复制
 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内容了:

代码语言:javascript
复制
1 [root@mini05 zhangtest]# git stash list

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

代码语言:javascript
复制
1 $ git stash apply stash@{0}

2. Feature分支

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

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

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

2.1. 创建并使用分支

代码语言:javascript
复制
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'
代码语言:javascript
复制
 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,准备合并:

代码语言:javascript
复制
1 [root@mini05 zhangtest]# git branch 
2 * dev
3   feature-vulcan
4   master

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

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

代码语言:javascript
复制
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参数。。

现在我们强行删除:

代码语言:javascript
复制
1 [root@mini05 zhangtest]# git branch -D feature-vulcan
2 Deleted branch feature-vulcan (was 239705f).

删除成功!

2.3. 小结

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. Bug分支
    • 1.1. 储藏当前分支代码
      • 1.2. 创建对应BUG的分支并修复
        • 1.3. 修复后合并且删除BUG分支
          • 1.4. 回到开始的分支并展开工作
          • 2. Feature分支
            • 2.1. 创建并使用分支
              • 2.2. 如何废弃分支
                • 2.3. 小结
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档