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选做猜数字

    程序设计思想 第一步:使用随机数生成1-100的数字 第二步:让用户输入数字 第三步:输入的数字与生成数字不同执行下一步,相同执行第五步 第四步:比较两数大小并输出结果,并返回第二步 第五步:输出猜对 ...

  2. 【react学习二】create-react-app 接入antd 并按需加载组件

    1.安装 cnpm i babel-plugin-import --save-dev 2.使用 在根目录下的package.json下的bable中添加相应代码 "babel": ...

  3. Hibernate基本原理理解

    什么是Hibernate? Hibernate,翻译过来是冬眠的意思,正好现在已经进入秋季,世间万物开始准备冬眠了.其实对于对象来说就是持久化. 扫盲------------------------- ...

  4. javaScript中的 this

    普通函数中的 this // es3中 function foo() { console.log(this);// 这里的this是 window } foo(); // 在es5中 严格模式下 fu ...

  5. vue中为computed计算属性传参遇到的问题,已解决

    首先介绍下项目背景, 需要将 dataList 中的 item.stars 属性传入 computed 返回要展示的值 部分代码如下(请不要纠结为什么这么做,数据格式确认如此): <li cla ...

  6. vscode 代码缩进2格

    "editor.detectIndentation":false,

  7. CSS 阴影应用

    1.背景阴影的使用 box-shadow:1px 1px 1px 1px #ccccccc inset; 说明:第一个参数为水平阴影的大小.第二个为垂直阴影的大小(值可以为负数).第三个参数是阴影模糊 ...

  8. free查看内存使用情况

    查看当前内存使用情况 [xiaoxi@xiaoxitest data]$ free -m total used free shared buffers cached Mem: -/+ buffers/ ...

  9. 大哥带我们的mysql注入

    这是今天的任务 任务三个 : 第一个手工注入找出admin用户的密码,第二个读取我phpstudy中mysql的my.ini这个配置文件的内容,第三个是通过这个注入点写入一个webshell,  都是 ...

  10. Ajax监测开始执行及结束执行

    特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...