网站首页 > 技术文章 正文
和往常一样,每个人团队开发者都在自己的本地分支上进行日常工作,相互独立又相互联系,一直以来相安无事,可是某天下午,上级领导突然急冲冲的打电话告诉你线上出bug了,需要你紧急修复,下班之前必须解决!
我们天生就是创造 bug 的特殊群体,每天都在和各种各样的 bug 打交道,早已经习惯了这样的工作节奏,再也没有当初刚刚遇到紧急问题的手足无措,先喝杯茶,冷静一下,然后汇报领导说:放心吧!保证30min 内解决问题!
背景
学习了分支操作的相关知识,团队内部就基本的开发流程达成一致:
假设线上是主干 master 分支,开发是 dev 分支,团队成员是自定义 custom 分支,平时开发时在大家在各自 custom 分支上工作,完成分配任务后再合并到开发 dev分支,等到开发分支功能稳定后,由项目领导负责合并到主干分支 master .
上述流程只是开发流程的简化版,实际情况更加复杂,后续再介绍 gitflow工作流相关知识.
由于是线上出现 bug,理所当然是基于 master 分支检出临时分支,修复分支代号为 issue-110,然后定位 bug 并提交,最后再合并到 master 分支,如此一来成功修复 bug,完成既定任务,心安理得准备下班回家!
如果真的向上述步骤那样操作,显然还不够冷静,刚才那一杯茶算是白喝了!因为这样操作可能会丢失现场数据,那很多工作岂不是白做了,下面简单演示一下:
错误示例
(一). 事发前正在自定义的 snow 分支上愉快编码中...
(二). 事发时直接检出主分 master 分支,并紧急修复 bug .
(2.1) 基于 master 分支检出 issue-110 分支,并修复提交.
(2.1) 切换到主干 master 分支,并合并修复 issue-110 分支
(三). 事发后切换回自定义 snow 分支,打算下班回家.
现在还打算下班吗?你所做的更改因为没有提交或者不能提交造成全部丢失!
结果
因为手头工作进行到一半无法提交或者忘记提交等原因,为了临时修复紧急 bug而直接切换到目标分支再回来时发现更改全部丢失,相当于那部分工作白忙活了!
正确示例
经过上述错误示例的惨痛教训后,再也不敢轻易切换分支了,原因在于工作区更改并没有被提交,或者说不能提交,如果能够有一种机制来保护案发现场,这样我们就能放心切换到其他分支工作,回来时一切如初,那该多好?
幸运的是,git 确实提供这么一种机制,git stash 命令临时存储工作区,类似"草稿箱"作用.
(一). 恢复工作区丢失更改,并使用 git stash 命令保存现场.
(二). 切换到开发 dev 分支并合并修复 issue-110 分支.
(三). 切换回自定义 snow 分支,并恢复工作现场.
git status 命令返回结果怎么显示工作区是干净的,好不容易才将丢失的更改找回来怎么又不见了?!逗我玩?
冷静,冷静,不要慌,既然工作现场已经保存到"草稿箱",那我们想要找回总要去"草稿箱"才能取出来吧?现在让我们看一下"草稿箱"有没有我们的工作现场?
这里的 stash@{0} 是草稿 id,因为"草稿箱"允许保存多条草稿!
现在放心了吧,保存的"草稿"安然无恙躺在未知的某个地方,现在我们想办法恢复回工作区即可!
- git stash apply 恢复草稿,然后 git stash drop 删除草稿
- git stash pop 恢复并删除草稿
结果
不论手头工作有没有提交,一旦工作区保存到"草稿箱"后,就放心大胆切换分支进行工作,回来时岁月静好,一切如初!
小结
紧急修复 bug 时,可以通过 git stash 保护工作现场,然后再切换到目标分支,检出修复分支,完成修复后切换到目标分支,合并修复分支,最后删除修复分支,此时再切换回本地分支后一切如初!
- 工作区更改添加到"草稿箱" : git stash,支持多次添加到"草稿箱"
- 列出"草稿箱"内容 : git stash list
- 恢复"草稿箱"内容 : git stash apply
- 删除"草稿箱"内容 : git stash drop
- 恢复并删除"草稿箱"内容 : git stash pop
- 恢复|删除指定"草稿箱"内容 : git stash <stash-id>,例如 git stash apply stash@{0}
猜你喜欢
- 2024-10-27 项目版本管理的最佳实践:飞流Flow篇
- 2024-10-27 DevOps(4)之分支模型(ps4如何构建画布)
- 2024-10-27 Git 在团队中的最佳实践——如何正确使用Git Flow
- 2024-10-27 鹅厂程序员干货分享 | 四种工作流,教你如何使用 GitHub
- 2024-10-27 Linux下git和github搭建使用教程(linux搭建git仓库)
- 2024-10-27 git这个小技巧非常实用,值得每个程序员学习
- 2024-10-27 Git实战002:Git快速入门使用详解(git简单教程)
- 2024-10-27 git 多人在同一分支上迭代开发时,如何保证分支提交历史保持线性
- 2024-10-27 Git基础知识(七)--分支开发工作流
- 2024-10-27 Git分支规范(git新建分支)
- 11-26Win7\8\10下一条cmd命令可查得笔记本电脑连接过的Wifi密码
- 11-26一文搞懂MySQL行锁、表锁、间隙锁详解
- 11-26电脑的wifi密码忘记了?一招教你如何找回密码,简单明了,快收藏
- 11-26代码解决忘记密码问题 教你用CMD命令查看所有连接过的WIFI密码
- 11-26CMD命令提示符能干嘛?这些功能你都知道吗?
- 11-26性能测试之慢sql分析
- 11-26论渗透信息收集的重要性
- 11-26如何查看电脑连接过的所有WiFi密码
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)