当前位置:   article > 正文

git图形化工具GitKraken的使用——Stash和Pop_pop stash

pop stash

正如两个单词的字面意思一样,stash(贮藏)、pop(将准备好的东西突然拿出来)

这一节模拟git中的这两个命令:git stashgit stash pop

在实际开发中,解决bug是避免不了的,在git中,每个bug都是通过新建一个临时分支来修复,修复完成后合并分支,然后删除临时分支。

当你develop分支上开发新的功能,代码写到一半的时候,突然测试报了个bug让你现在解决,但是手上代码写到一半,总不能现在提交吧,因为解决bug是在新的分支上,总得保持工作区以及暂存区是干净的吧。这时候git的stash功能就派上了用场;
现在假设要解决生产上的bug,生产上的bug通常比较急,我们在master分支上创建bug临时分支(这里一般生产紧急bug都是基于master创建,当然也看个人习惯和团队要求,这个后面再说):

这里写图片描述

好了,情景都搭建好了,现在来操作,在自己的功能分支上,执行以下命令:

$ git stash
Saved working directory and index state WIP on feature: e13ca91 添加一级标题
HEAD is now at e13ca91 添加一级标题
  • 1
  • 2
  • 3

对应在GitKraken上的操作是:

这里写图片描述

然后可以从GitKraken上可以看到,工作区以及暂存区都干干净净,在log区域可以看到有个存储样式的图标:

这里写图片描述

好了现在可以去修改bug了,切换到master分支,创建bug分支:

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

$ git checkout -b issue-001
Switched to a new branch 'issue-001'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

修复完成之后提交,切换到master分支,将bug分支分别合并到master和develop,最后删除bug临时分支:

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

## 合并bug分支到master 
$ git merge --no-ff -m "merge bug fix 001" issue-001
Merge made by the 'recursive' strategy.
 demo1.html | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

# 切换到develop
$ git checkout develop
Switched to branch 'develop'

# 合并bug分支到develop
$ git merge --no-ff -m "merge bug fix 001" issue-001
Merge made by the 'recursive' strategy.
 demo1.html | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

# 删除bug分支
$ git branch -d issue-001
Deleted branch issue-001 (was 1f1b4f4).
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

OK,现在bug修复完成了,现在又要回到自己的功能分支继续开发了

之前在功能分支上的修改存储在stash中,可以通过 git stash list 来查看:

$ git stash list
stash@{0}: On feature1: 1:
  • 1
  • 2

现在把stash的内容恢复到工作区:

$ git stash pop stash@{0}
On branch feature1
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:   demo1.html

no changes added to commit (use "git add" and/or "git commit -a")
Dropped stash@{0} (fe26b728927240e931a406cd763fb0ddb448271e)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

这里 git stash popgit stash apply(恢复) 和 git stash drop(删除) 的综合

这里写图片描述

可以看到之前的工作修改已经全部恢复到了工作区(之前的暂存区的内容也会恢复到工作区)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/386934
推荐阅读
  

闽ICP备14008679号