[Git] 020 stash —— Git 中的”皮姆粒子“

0. 我准备模拟两种情况

第一种

[Git] 020 stash —— Git 中的”皮姆粒子“


第二种

[Git] 020 stash —— Git 中的”皮姆粒子“


情况简析

  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 目前的情况

[Git] 020 stash —— Git 中的”皮姆粒子“


2.2 没有条件,创造条件

2.1.1 开一条分支

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

[Git] 020 stash —— Git 中的”皮姆粒子“


[Git] 020 stash —— Git 中的”皮姆粒子“


[Git] 020 stash —— Git 中的”皮姆粒子“


2.2.2 查看当前状态

[Git] 020 stash —— Git 中的”皮姆粒子“


2.3 有了条件,解决问题

2.3.1 使用“皮姆粒子”

  • 命令:git stash

[Git] 020 stash —— Git 中的”皮姆粒子“


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

2.3.2 切换分支

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

[Git] 020 stash —— Git 中的”皮姆粒子“


  • 此时的情况

[Git] 020 stash —— Git 中的”皮姆粒子“


2.3.3 修复 Bug

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

[Git] 020 stash —— Git 中的”皮姆粒子“


2.3.4 添加 & 提交

[Git] 020 stash —— Git 中的”皮姆粒子“


2.3.5 切换 & 合并

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

[Git] 020 stash —— Git 中的”皮姆粒子“


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

2.3.6 删除分支

[Git] 020 stash —— Git 中的”皮姆粒子“


2.3.7 再次使用“皮姆粒子”

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

[Git] 020 stash —— Git 中的”皮姆粒子“


[Git] 020 stash —— Git 中的”皮姆粒子“


  • 恢复有两种方法
    • 方法一:git stash apply + git stash drop
    • 方法二:git stash pop

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

[Git] 020 stash —— Git 中的”皮姆粒子“


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

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

3.1 准备活动

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

[Git] 020 stash —— Git 中的”皮姆粒子“


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

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

[Git] 020 stash —— Git 中的”皮姆粒子“


3.1.3 切到 "master" 分支并合并

[Git] 020 stash —— Git 中的”皮姆粒子“


3.1.4 查看“日志”

[Git] 020 stash —— Git 中的”皮姆粒子“


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

3.2 开始创造条件

3.2.1 目前的情况

[Git] 020 stash —— Git 中的”皮姆粒子“


3.2.2 切换分支

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

[Git] 020 stash —— Git 中的”皮姆粒子“


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

3.2.3 “无中生有”

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

3.3 开始修复 Bug

3.3.1 使用“皮姆粒子”

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

[Git] 020 stash —— Git 中的”皮姆粒子“


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

[Git] 020 stash —— Git 中的”皮姆粒子“


3.3.2 一个注意点

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

[Git] 020 stash —— Git 中的”皮姆粒子“


  • 挖坑:探索暂存区“消失”的文档
    • 坑号编码:Git20-1