0. 我准备模拟两种情况

第一种

第二种

情况简析

  1. 仓库中的最新版本发现 Bug,需要立即修复
  2. 当前在 "dev" 分支中工作到一定程度,尚不能提交,但删之可惜

ps: 在分支中没有提交就切其他分支,改动部分会被覆盖

  • 下面是 "Git" 的温馨提示

error: Your local changes to the following files would be overwritten by checkout:
...
Please commit your changes or stash them before you switch branches.
Aborting `

1. 解决方案

1.1 题外话

  • 单片机中有个“中断函数”,意为停止事件 A,优先处理事件 B,处理完后再回来继续 A 的工作
  • 电影《蚁人 2》中,皮姆博士暴露了行踪,而他身处的大楼里有他的心血。最后,他的“皮姆粒子”没有让他失望!他将整座大楼缩小成一个行李箱,实力证明”跑得了和尚,也跑得了庙“!
  • 金刚琢、乾坤一气袋之类的说下去就没底了

1.2 "stash" —— "Git" 中的”皮姆粒子“

  • 当前的工作就好像皮姆博士的那栋大楼
  • "stash" 就好像“皮姆粒子”
  • "stash" 可以把“大楼”化作“行李箱”,放到一边;等找到“合适的地皮”后,再把“行李箱”恢复成“大楼”

2. 第一种情况的制造与解决

2.1 目前的情况

2.2 没有条件,创造条件

2.1.1 开一条分支

  1. 切到该分支
  2. 新建一个文档 "note_02.txt"
  3. 往 "note_02.txt" 中写入文本,并保存

2.2.2 查看当前状态

2.3 有了条件,解决问题

2.3.1 使用“皮姆粒子”

  • 命令:git stash

  • 因为 "note_02.txt" 并没有添加至暂存区,所以有个反馈

2.3.2 切换分支

  1. 切到 "master" 分支
  2. 另开一条分支 "stash_1",并切入

  • 此时的情况

2.3.3 修复 Bug

  • 打开 "note_01.txt",将 "5. master round 3.1" 中的 "round" 改为 "version",并保存

2.3.4 添加 & 提交

2.3.5 切换 & 合并

  1. 切到 "master" 分支
  2. 合并 "stash_01" 分支

  • 这里没有用 "--no-ff",情形二再用

2.3.6 删除分支

2.3.7 再次使用“皮姆粒子”

  • "statsh" 有个参数 "list",用来查看“行李箱”

  • 上图的 "list" 像极了 "reflog"
  • 上图的 "stash@{0}" 像极了 "HEAD@{n}"
    • 可以多次使用 git stash
    • 恢复时,可以选择指定的“行李箱”,语法:git stash apply stash@{n}
  • 恢复

  • 恢复有两种方法

    • 方法一:git stash apply + git stash drop
    • 方法二:git stash pop

2.4 解决问题后,观察一下“日志”

  • 没有增加提交次数
  • 哈希值也没有变

3. 第二种情况的制造与解决

3.1 准备活动

3.1.1 在 "dev" 分支将文件添加至暂存区

  • 因为 "2.2.1" 的第 3 步,"note_02.txt" 是在 "Git Bash" 用 "vim" 写入数据的,所以有个格式提醒
  • 我给 "note_02.txt" 转了格式后,用 git status 查看了一下

3.1.2 在 "dev" 分支将文件提交给本地仓库

3.1.3 切到 "master" 分支并合并

3.1.4 查看“日志”

  • "2.4" 中没有看到的那次 "commit" 与其哈希值在这里显现了

3.2 开始创造条件

3.2.1 目前的情况

3.2.2 切换分支

  1. 切到 "dev" 分支
  2. 修改 "note_01.txt"
  3. 将 "note_01.txt" 添加至暂存区

  • 注意,这里的 "note_01.txt" 的状态是在暂存区

3.2.3 “无中生有”

  • 假设 "3.2.1" 的图中,"master" 分支的 "commit (n+2)" 被 YorkFish 找出一个 Bug,需要立即修复

3.3 开始修复 Bug

3.3.1 使用“皮姆粒子”

  • 与情形一相似,我就不多费口舌了

  • 这次使用 "--no-ff" 与 "pop"

3.3.2 一个注意点

  • 我在 "3.2.2" 将 "note_01.txt" 加入暂存区了,但现在的显示表明暂存区没有收入

  • 挖坑:探索暂存区“消失”的文档

    • 坑号编码:Git20-1

[Git] 020 stash —— Git 中的”皮姆粒子“的更多相关文章

  1. git stash pop 冲突,git stash list 中的记录不会自动删除的解决方法

    在使用git stash代码时,经常会碰到有冲突的情况,一旦出现冲突的话,系统会认为你的stash没有结束. 导致的结果是git stash list 中的列表依然存在,实际上代码已经pop出来了. ...

  2. 关于Git的stash命令

    add 添加新文件到 Git 代码仓库的索引中 $ git add filename mv 移动或重命名文件 $ git mv old-filename new-filename rm 从工作目录和 ...

  3. git submodule 使用过程中遇到的问题

    git submodule 使用过程中遇到的问题 资源文件 原.gitmodules文件的内容如下: [submodule "Submodules/FFmpegWrapper"] ...

  4. git在实际开发中的应用

    PS: git操作实例(https://learngitbranching.js.org/?demo) 一, 创建分支,合并分支到master 1. 在远程仓库中创建master和test分支 2.本 ...

  5. 第23月第24天 git命令 .git-credentials git rm --cached git stash clear

    在git push的时候,有时候我们会想办法撤销git commit的内容 1.找到之前提交的git commit的id git log 找到想要撤销的id 2.git reset –hard id ...

  6. git 彻底删除历史记录中的大文件

    Reference 大家一定遇到过在使用Git时,不小心将一个很大的文件添加到库中,即使删除,记录中还是保存了这个文件.以后不管是拷贝,还是push/pull都比较麻烦. === 删除大文件方法 方法 ...

  7. git pull和git merge区别&&Git冲突:commit your changes or stash them before you can merge. 解决办法

    http://blog.csdn.net/sidely/article/details/40143441 原文: http://www.tech126.com/git-fetch-pull/ Git中 ...

  8. git从远程仓库中更新代码到本地仓库

    git从远程仓库中更新代码到本地仓库 有时候在使用git pull的时候,会莫名才报错.查了很多资料,尝试过git的很多命令.包括git fetch命令,都会报同样的错.最后终于发现了一条捷径,由网友 ...

  9. git branch stash

    一.branch(分支) 1.创建分支 git branch dev 2.切换分支 git branch dev 3.合并分支 git merge bug 4.查看分支 git branch 5.删除 ...

随机推荐

  1. Java 11必掌握的8大特性,完美代码信手拈来

    [MyEclipse CI 2019.4.0安装包下载] 美国时间 09 月 25 日,Oralce正式发布了Java 11,这是据Java 8以后支持的首个长期版本.从官方发布的支持路线图表看出,J ...

  2. canvas实现圆角、圆框图片

    参考资料: http://www.zhangxinxu.com/study/201406/image-border-radius-canvas.html https://www.jianshu.com ...

  3. rsync服务端排错思路

    rsync服务端排错思路       rsync服务端排错思路 查看rsync服务配置文件路径是否正确,正确的默认路径为/etc/rsyncd.conf 查看配置文件里host allow,host ...

  4. postman—创建collection,执行collection和批量执行

    接口测试中,可以在 Postman 逐个创建请求.但当请求逐渐增多时,如果我们不采取任何措施管理,散乱的请求维护起来就比较麻烦了.这个时候我们可以创建测试集 Collection 来对这些请求进行管理 ...

  5. JSON.parse 测试

    第一种 报错 var t = JSON.parse(""); console.log(t); 第二种 正常 var t = JSON.parse('{"AA": ...

  6. json解析工具类

    对jackson的ObjectMapper的封装: ObjectMapperUtils: import static com.fasterxml.jackson.core.JsonFactory.Fe ...

  7. CTSC&APIO 2017游记

    Day 0 早上4点多起床赶飞机,起床的时候发现闹钟调成下午4点的了...(虽然说早就已经被父母的洗漱声音吵醒了) 飞机上碎觉.到了北京发现比福州还热...而且北京今天意外地好天气,没有传言中的&qu ...

  8. Spring Boot教程(二十三)使用Swagger2构建强大的RESTful API文档(2)

    添加文档内容 在完成了上述配置后,其实已经可以生产文档内容,但是这样的文档主要针对请求本身,而描述主要来源于函数等命名产生,对用户并不友好,我们通常需要自己增加一些说明来丰富文档内容.如下所示,我们通 ...

  9. LBS 基于位置的服务

    LBS (Location Based Services)基于位置的服务 基于位置的服务,它是通过电信移动运营商的无线电通讯网络(如GSM网.CDMA网)或外部定位方式(如GPS)获取移动终端用户的位 ...

  10. 同一个tomcat部署多个项目11

    在开发项目中,有时候我们需要在同一个tomcat中部署多个项目,小编之前也是遇到了这样的情况,碰过不少的壁,故整理总结如下,以供大家参考.(以Linux为例,其他系统同样适用) 一.首先将需要部署的项 ...