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. container_of机制

    #include <stdio.h> #include <stdlib.h> /* 计算成员变量首部相对于结构变量首部的偏移量 */ #define offsetof(TYPE ...

  2. python类库32[多进程通信Queue+Pipe+Value+Array]

    多进程通信 queue和pipe的区别: pipe用来在两个进程间通信.queue用来在多个进程间实现通信. 此两种方法为所有系统多进程通信的基本方法,几乎所有的语言都支持此两种方法. 1)Queue ...

  3. linux服务器外网内网(双网络)搭建

    一共有2台服务器,分别用a,b表示.a双网卡,即有外网也有内网.b只有内网环境.a,b的内网是通过交换机组建.至于外网怎么搭建我就不说了.关键说一说内网是怎么组建的. 如果你对linux不熟悉,对网卡 ...

  4. Python Number(数字) Ⅱ

    Python math 模块.cmath 模块 Python 中数学运算常用的函数基本都在 math 模块.cmath 模块中. Python math 模块提供了许多对浮点数的数学运算函数. Pyt ...

  5. 18.二叉树的镜像(python)

    题目描述 操作给定的二叉树,将其变换为源二叉树的镜像. class Solution: # 返回镜像树的根节点 def Mirror(self, root): # write code here if ...

  6. python操作mysql,redis

    import pymysqlip ="127.0.0.1"#数据库地址user = 'username'#数据库用户名password="pwd"#数据库密码d ...

  7. [Usaco2010 Dec]Treasure Chest 藏宝箱

    题目链接:点这里 Solution: 刚开始以为是博弈论,然而不是... 首先考虑n方dp,设f(l,r)为只有\(l\)到\(r\)区间的钱的先手最大获利 那么我们可以得到式子f(l,r)=sum( ...

  8. 【BZOJ4565】 [Haoi2016]字符合并

    Description 有一个长度为 n 的 01 串,你可以每次将相邻的 k 个字符合并,得到一个新的字符并获得一定分数.得到的新字 符和分数由这 k 个字符确定.你需要求出你能获得的最大分数. I ...

  9. 【Leetcode】国王挖金矿

    参考该文章 https://www.cnblogs.com/henuliulei/p/10041737.html #include <iostream> #include <cstr ...

  10. Android开源SlidingMenu的使用

    一.SlidingMenu简介 SlidingMenu是最常用的几个开源项目之一. GitHub上的开源项目Slidingmenu提供了最佳的实现:定制灵活.各种阴影和渐变以及动画的滑动效果都不错.不 ...