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

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

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

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

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

git图形化工具GitKraken的使用——Stash和Pop_第1张图片

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

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

对应在GitKraken上的操作是:

git图形化工具GitKraken的使用——Stash和Pop_第2张图片

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

git图形化工具GitKraken的使用——Stash和Pop_第3张图片

好了现在可以去修改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'

修复完成之后提交,切换到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).

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

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

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

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

$ git stash pop stash@{0}
On branch feature1
Changes not staged for commit:
  (use "git add ..." to update what will be committed)
  (use "git checkout -- ..." 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)

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

git图形化工具GitKraken的使用——Stash和Pop_第4张图片

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

你可能感兴趣的:(git,git)