Bug分支
专业英语
stash 存放,储存
BUG分支
有了bug就需要修复,在Git中,由于分支是如此的强大,所以,每个bug都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除。
实验 先处理bug分支
当你接到一个修复一个代号101的bug的任务时,很自然地,你想创建一个分支issue-101来修复它,但是,等等,当前正在dev上进行的工作还没有提交:
当前的工作状态,hello.py已经添加到了暂存区,修改了readme.txt文件,还没有添加到暂存区
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: hello.py
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: readme.txt
任务紧急,当务之急是要抓紧时间修改master上的bug,然而现在工作区的状态比较乱,需要整理一下。最好的办法就是能不能把现在的状态保存一下。
$ git branch
* dev
master
Administrator@WIN-E2URN8GKKHJ MINGW64 ~/Desktop/learngit (dev)
$ git stash
Saved working directory and index state WIP on dev: 65a0233 add merge
HEAD is now at 65a0233 add merge
Administrator@WIN-E2URN8GKKHJ MINGW64 ~/Desktop/learngit (dev)
$ git status
On branch dev
nothing to commit, working directory clean
用了这个命令后,Git把dev上的当前状态存储起来了,当前的工作区状态是干净的,我们可以去做我们自己的事情了。
在issue-bug分支上将bug改完,然后切换到master分支,将issue分支用普通模式完成合并。
$ git branch -d issue-101
Deleted branch issue-101 (was 295eea3).
Administrator@WIN-E2URN8GKKHJ MINGW64 ~/Desktop/learngit (master)
$ git branch
dev
* master
Administrator@WIN-E2URN8GKKHJ MINGW64 ~/Desktop/learngit (master)
$ git log --graph
* commit c172dd3c1f4b663d3b6cfa4590cfaaa10c357c2f
|\ Merge: ca44dc9 295eea3
| | Author: wangguowei <wgw1206798585@vip.qq.com>
| | Date: Sat Oct 15 15:27:10 2022 +0800
| |
| | merged bug fix 101
| |
| * commit 295eea310a9a034ba3f4d4fa3c9cd042f9e7bcfc
|/ Author: wangguowei <wgw1206798585@vip.qq.com>
| Date: Sat Oct 15 15:25:36 2022 +0800
|
| fix bug 101
|
* commit ca44dc913f40971cc38c8955c65bb8f49fce1059
|\ Merge: e32a433 65a0233
| | Author: wangguowei <wgw1206798585@vip.qq.com>
| | Date: Sat Oct 15 11:16:50 2022 +0800
注意:在Git的交互图中,每一个节点都是一次提交。bug分支只进行了一次提交!不是两次!!
实验 处理完bug后回来做我们自己的事情
我们切换回到dev分支,并将保存在stash中的现场恢复。
$ $ git checkout dev
* dev
master
Administrator@WIN-E2URN8GKKHJ MINGW64 ~/Desktop/learngit (dev)
$ git stash list
stash@{0}: WIP on dev: 65a0233 add merge
Administrator@WIN-E2URN8GKKHJ MINGW64 ~/Desktop/learngit (dev)
$ git stash pop
On branch dev
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: hello.py
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: readme.txt
Dropped refs/stash@{0} (bc4a94cd38df1d1205d897884727f5f9c1b93813
命令的学习
git stash pop
等同于
git stash apply
git stash drop
这下就原来的工作区和暂存区的状态回来了!stash中的内容也没有了!
$ git stash list
思考 master上的bug在dev分支中仍然存在
在master分支上修复了bug后,我们要想一想,dev分支是早期从master分支分出来的,所以,这个bug其实在当前dev分支上也存在。
同样的bug,要在dev上修复,我们只需要把4c805e2 fix bug 101这个提交所做的修改“复制”到dev分支。注意:我们只想复制4c805e2 fix bug 101这个提交所做的修改,并不是把整个master分支merge过来。
为了方便操作,Git专门提供了一个cherry-pick命令,让我们能复制一个特定的提交到当前分支:
git cherry-pick <commit>命令,把bug提交的修改“复制”到当前分支,避免重复劳动。
使用Git修复bug的常用思路
- 保存现场
- 新建bug分支
- 在bug分支中完成修改
- 将master分支合并了bug分支
- 将bug分支中的修改同步到dev分支
- 根据需要将bug分支删除