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

640?wx_fmt=jpeg

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

640?wx_fmt=gif

一、Bug分支

640?wx_fmt=gif

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

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

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

640?wx_fmt=png

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

640?wx_fmt=png

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

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

640?wx_fmt=png

第二步:切换到master分支

640?wx_fmt=png

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

640?wx_fmt=png

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

640?wx_fmt=png

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

640?wx_fmt=png

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

640?wx_fmt=png

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

640?wx_fmt=png

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

640?wx_fmt=png

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

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

640?wx_fmt=png

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

640?wx_fmt=png

第八步:把issue-101 删除。

640?wx_fmt=png

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

命令:

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,回到工作现场。

640?wx_fmt=gif

二:Bug分支后处理

640?wx_fmt=gif

有个大问题,你发现了嘛?在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分支。

640?wx_fmt=png

第二步: git cherry-pick <commitId>

640?wx_fmt=png

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

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

640?wx_fmt=png

方法2:git log –graph

640?wx_fmt=png

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

640?wx_fmt=png

目前分支:

640?wx_fmt=png

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

对了,羞答答的问一句smiley_21.png:这个菜+酒系列,还喜欢吗?请用“在看smiley_66.png来回复我吧。

往期回顾

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值