在开发时候临时任务,如需要debug其他内容,或者是要新开发一个需要模块feature,那就需要先停下保存好手头工作,然后完成临时任务,继而恢复工作区继续工作。
保存目前手头内容
$ git stash
Git还提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作,用git status查看工作区,就是干净的(除非有没有被Git管理的文件),因此可以放心地创建分支来修复bug。
建立bug分支
- 在分支上找到bug,确定分支然后建立临时分支进行修复。比如在master分支上建立分支。
- 建立分支,$ git checkout -b issue1
- 修复bug后提交文件合并分支
$ git add ......
$ git commit -m "fix bug "
- 修复完成后切换回到分支并完成合并,最后删除issue1分支
$ git switch master
$ git meage --no-ff -m "merged bug fix " issue1
返回待工作分支
- 查看原先工作区
$ git stash list
- 工作现场还在,Git把stash内容存在某个地方了,需要恢复一下,有两个办法:一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;另一种方式是用git stash pop,恢复的同时把stash内容也删了,如下所示。
$ git stash apply
Removing t2.md
On branch master
Your branch is up to date with 'origin/master'.
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
deleted: t2.md
no changes added to commit (use "git add" and/or "git commit -a")
$ git stash list
stash@{0}: WIP on master: f04f5fc need to delete
$ git stash pop
Removing t2.md
On branch master
Your branch is up to date with 'origin/master'.
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
deleted: t2.md
no changes added to commit (use "git add" and/or "git commit -a")
Dropped refs/stash@{0} (d0db5a622814a33cd13f48c7561154c0ad356e7c)
$ git stash list
- 再次输入 git stash list,此时找不到任何stash内容,表明已经恢复了。
增feature
软件开发中,总有无穷无尽的新的功能要不断添加进来。添加一个新功能时,你肯定不希望因为一些实验性质的代码,把主分支搞乱了,所以,每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合并,最后,删除该feature分支。
步骤如下
- 保存手头工作
- 根据待开发一个新feature,新建一个子分支;
- 完成工作合并子分支,删除子分支。如果要丢弃一个没有被合并过的子分支,可以通过git branch -D 强行删除。
- 还原手头工作