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. Kendo UI使用教程:Bower Packages

    [Kendo UI最新试用版下载] Kendo UI目前最新提供Kendo UI for jQuery.Kendo UI for Angular.Kendo UI Support for React和 ...

  2. 安装RabbitMQ 后配置遇到问题解决方案

    http://blog.csdn.net/j_shine/article/details/78833456

  3. HDU-6546-Function(贪心)

    链接: https://vjudge.net/problem/HDU-6546 题意: wls 有 n 个二次函数 Fi(x) = aix2 + bix + ci (1 ≤ i ≤ n). 现在他想在 ...

  4. NOIP2016提高A组模拟中秋节9.15总结

    这套题不算难但是比赛上萎掉了. 第一题数论, 当找到一个合适的数就直接处理答案,再用筛法将处理过的删掉. 比赛上没想到筛法,只拿了70分. 第二题二分答案,然后验证合法性就可以. 但是由于不能二分小数 ...

  5. c++ copy和operator =

    目录(?)[+] 构造函数 拷贝构造函数 赋值函数   C++中一般创建对象,拷贝或赋值的方式有构造函数,拷贝构造函数,赋值函数这三种方法.下面就详细比较下三者之间的区别以及它们的具体实现 1.构造函 ...

  6. postman—使用newman来执行postman脚本

    我们知道postman是基于javascript语言编写的,而导出的json格式的postman脚本也无法直接在服务器运行,它需要在newman中执行(可以把newman看做postman脚本的运行环 ...

  7. C++ - 操作运算符

    一.操作运算符 操作运算符:在C++中,编译器有能力将数据.对象和操作符共同组成表达式,解释为对全局或成员函数的调用 该全局或成员函数被称为操作符函数,程序员可以通过重定义函数操作符函数,来达到自己想 ...

  8. selenium+键盘鼠标

    一.简单操作 1.点击(鼠标左键)页面按钮:click() 2.请空输入框:clear() 3.输入字符串:send_keys() 二.模拟键盘 模拟键盘的操作需要先导入键盘模块:from selen ...

  9. 步步向前之Element-UI

    Table 固定表头 只要在el-table元素中定义了height属性,即可实现固定表头的表格,而不需要额外的代码.例如: <el-table :data="tableData3&q ...

  10. 1、安装Scrapy

    一.网址:https://doc.scrapy.org/en/latest/intro/install.html 二.安装过程中出现"cl.exe"找不到的错误,解决方法:http ...