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)首先根据公式求,利用递归完成阶乘函数的初始化,并且通过调用阶乘,实现公式计算 (2)递推方法,根据杨辉三角的特点,设置二维数组,从上到下依次保存杨辉三角所得数 ...

  2. vuex中this.$store.dispatch和this.$store.commit的区别(都是调用vuex中的方法。一个异步一个同步)

    dispatch:含有异步操作,例如向后台提交数据,写法: this.$store.dispatch('action方法名',值) commit:同步操作,写法:this.$store.commit( ...

  3. 设置HTML的TextArea标记跟随文本内容自动设置高度

    写内容的时候用的是textarea来写,可以换行,然后预览页面也要显示是换行才行,所以预览页面还是要用textarea来显示, 样式去掉边框,不可以拉伸,不可编辑 // html <textar ...

  4. Python 函数Ⅲ

    默认参数 调用函数时,默认参数的值如果没有传入,则被认为是默认值.下例会打印默认的age,如果age没有被传入: 以上实例输出结果: 不定长参数 你可能需要一个函数能处理比当初声明时更多的参数.这些参 ...

  5. git的用法的总结

    git的基本用法(一) 1).git的初始化 --配置用户名和邮箱 不然后面无法提交 git config --global user.name "myname"; git con ...

  6. nmon监控使用

    1.上传nmon_linux_x86_64文件到服务器 2.修改文件权限chmod 775 nmon_linux_x86_64 3.压测时需要执行以下命令监控服务器./nmon_linux_x86_6 ...

  7. 代码检测docker-sonarqube

    gitlab-ce + gitlab-runner + sonarqube,在提交代码时对代码质量进行检测,对不符合要求的代码不允许提交到gitlab version: '3.1' services: ...

  8. 牛客网 TaoTao要吃鸡 ( 0/1背包变形 )

    题意 : 题目链接 分析 :  如果没有 BUG (即 h == 0 的时候)就是一个普通的 0 / 1 背包 需要讨论一下 h != 0 的情况 此时有就相当于有物品是有特权的 而且背包装有特权的物 ...

  9. sublime Text3中文字体错位问题解决办法

    问题如下: 问题成因: 配置中的默认字体为Consolas,这种字体对中文支持效果不是很好 解决办法: 1.下载 Yahei Consolas Hybrid 字体 2.将下载的Yahei Consol ...

  10. es之主分片和复制分片的交互过程

    1:索引(创建或者删除)一个文档 首先:发送一个索引或者删除的请求给node1 其次:node1接收到请求之后,会根据请求中携带的参数“文档id”判断出该文档应该存储在具体哪一个shard中 shar ...