首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Git学习笔记6】把当前工作现场“储藏”起来:stash操作

【Git学习笔记6】把当前工作现场“储藏”起来:stash操作

作者头像
小小詹同学
发布2019-11-12 22:54:30
4390
发布2019-11-12 22:54:30
举报
文章被收录于专栏:小詹同学小詹同学

明月几时有,把酒问青天,光吃菜,不加点“酒”怎么行呢。今天来说说在code战场上“喝醉”后怎么收场的事情,Bug分支以及bug分支的后处理。啥,题目有点懵??,先看到底呗,还懵圈就来后台撩我,小白无偿陪你聊聊这“醉酒”的事情。

一、Bug分支

写code的呀,bug就像家常便饭一样。有了bug就需要修复,在Git中,由于分支是如此的强大,所以,每个bug都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除。

情景:当你接到一个修复一个代号101的bug的任务时,很自然地,你想创建一个分支issue-101来修复它。但是,等等,当前正在dev上进行的工作还没有提交。

我们先复现下这种环境:目前的分支只有master。

新建一个dev分支,做些修改,比如删除了一个文件。

这个时候我们需要去修复bug,并不是你不想提交,而是工作只进行到一半,还没法提交,预计完成还需1天时间。但是,必须在两个小时内修复该bug,怎么办?Git还提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作。

第一步:在需要存储的分支中输入命令git stash

第二步:切换到master分支

第三步:新建issue-101分支,且修复bug

你想看我修改了什么,你可以用 git diff查看下差别是什么

第四步:在issue-101分支上提交commit,且切换到master分支

第五步:在master分支进行merge(使用—no-ff方式)

第六步:切换到dev分支,git status,工作区是干净的。

刚才的工作现场存到哪去了?用git stash list命令看看:

工作现场还在,Git把stash内容存在某个地方了,但是需要恢复一下。

第七步:git stash pop 恢复存储现场,且删除这个存储。

用git stash list 发现没有任何存储了。

第八步:把issue-101 删除。

注意:还有一个恢复现场的办法,但是这个就不会自动删除现场,需要你手动删除。

命令:

git stash apply stash@{0}

git stash drop stash@{0}

你可以多次stash,恢复的时候,先用git stash list查看,然后恢复指定的stash,用命令:git stash apply stash@{0}

总结:

修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。

二:Bug分支后处理

有个大问题,你发现了嘛?在master分支上修复了bug后, dev分支是早期从master分支分出来的,所以,这个bug其实在当前dev分支上也存在。

那怎么在dev分支上修复同样的bug?

  • 方案1:自己在dev分支上重复操作一次,然后提交。麻烦哈!不建议。
  • 方案2:需要把1358040 fix bug 101这个提交所做的修改“复制”到dev分支。注意:我们只想复制1358040 fix bug 101这个提交所做的修改,并不是把整个master分支merge过来。很简单!很推荐!
  • 方案3:从master 新切一个dev2分支出来,然后在dev2分支上stash。也比较好,与方案2无差啥。

方案3,口头说一下:

git checkout -b dev2 (在master分支上操作)

git stash pop

git checkout master

git branch -d dev (在master分支操作)

我们来实验一波方案2

为了方便操作,Git专门提供了一个cherry-pick命令,让我们能复制一个特定的提交到当前分支。接着上面bug分支的操作来哟。

第一步:切换到dev分支。

第二步: git cherry-pick <commitId>

注意:commitId怎么查看,还记得嘛?

方法1:git reflog 根据红框找到箭头所指,

方法2:git log –graph

可以理解一下为什么可以这么做?Git自动给dev分支做了一次提交,注意这次提交的commit是637f237,它并不同于master的1358040,因为这两个commit只是改动相同,但确实是两个不同的commit。用git cherry-pick,我们就不需要在dev分支上手动再把修bug的过程重复一遍。

目前分支:

总结:在master分支上修复的bug,想要合并到当前dev分支,可以用git cherry-pick <commit>命令,把bug提交的修改“复制”到当前分支,避免重复劳动。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小詹学Python 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档