git学习(11)—— 分支管理(Bug分支)

当你接到一个修复一个代号101的bug的任务时,很自然地,你想创建一个分支issue-101来修复它,但是,当前正在dev上进行的工作还没有提交(而且还未完成,无法提交,而bug需要立即开始修复),此时如果直接切换到master分支或者创建并切换到issue-101分支,会将当前修改也带到master分支或者新的分支上。

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

储藏工作现场: git stash

$ git stash
Saved working directory and index state WIP on dev: f52c633 add merge

现在再用 git status 查看工作区状态,就是干净的

该如何处理 代号为 101 的 bug 任务呢?

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

git checkout master

git switch -c issue-101 / git checkout -b issue-101

$ git checkout master
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 6 commits.
  (use "git push" to publish your local commits)

$ git checkout -b issue-101
Switched to a new branch 'issue-101'

(2)在新分支(以 issue-101分支为例)上修改bug并提交到本地版本库

...fix bug...

git add ...

git commit -m '....'

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

git checkout master

git merge --no-ff -m 'merged bug fix 101' issue-101

git branch -d issue-101

(4)bug修复完成,可切换回 dev 分支继续干活啦

git switch dev

切换回工作分支dev后,如何恢复工作现场呢?

(1)查看工作现场储藏列表:git stash list

git学习(11)—— 分支管理(Bug分支)

(2) 恢复储藏的工作现场

方式一:

恢复最近一次储藏的工作现场(不删除恢复的工作现场):git stash apply 

方式二:

恢复最近一次储藏的工作现场(且删除恢复的工作现场):git stash pop

方式三:

恢复指定的储藏的工作现场(不删除恢复的工作现场):git stash apply stash@{xx}

清空工作现场储藏列表:git stash clear

eg. git stash apply stash@{2}  

git学习(11)—— 分支管理(Bug分支)

如何将此次bug修改同步到dev(其他分支)上呢?

把修改“复制”到当前分支git cherry-pick commit_id

(1)找到在 issue-101 上提交代码的 commit_id (尤其需要注意,commit_id是修改bug时提交的那个,不是合并到master分支上的那个!!!),

(2)在需要合并修改的那个分支上执行 git cherry-pick <commit_id>


注意,如果使用 git cherry-pick 合并代码时存在代码冲突:

在 dev 分支(当前工作的分支)上提交代码到版本库后再使用 git cherry-pick <commit_id>进行代码复制,因为只有在代码都提交以后才可以进行代码的冲突解决合并。

上一篇:Linux 下Socks5极速搭建指南[简便配置]


下一篇:测试跟踪实践:Metersphere与Jira工单状态同步