Kwin Huang

不会搞艺术的程序员不是好设计师.

Git-stash

2019-09-20

背景

我们目前在做的项目, 采用的是快速迭代的方式, 开发和测试和用户测试和改bug并行, 经常要切分支.

一个人可能要同时管理以下分支

  • dev => 开发分支
  • sit => 测试人员测试的的分支
  • uat => 用户测试的分支
  • hot-fix-xxx => 生产问题修复的分支
  • 930 => 截止日期为 9月30日 要上线的功能的分支
  • 1030 => 截止日期为 10月30日 要上线功能的分支
  • ...

并且分支切的很勤, 因为经常生产问题当天要解决并发版, 有的bug在特定的环境才能重现, 不切分支过去看不行 ......

所以经常用到 stash 命令, 遂系统的查询了一下 stash 的使用

作用

存放;贮藏

使用

常用

git stash save "save message"
// 执行存储时, 添加备注, 方便查找, 只有git stash 也要可以的, 但查找时不方便识别

注意 没有在git 版本控制中的文件,是不能被git stash 存起来的 很明显,先执行下git add 加到git版本控制中,然后再git stash就可以了

但是:git add 只是把文件加到git 版本控制里,并不等于就被stash起来了,git add和git stash 没有必然的关系,但是执行git stash 能正确存储的前提是文件必须在git 版本控制中才行。


list

git stash list
// 查看stash了哪些存储
// stash@{0}: On _1030/expense-ecc: just test stash
// stash@{1}: WIP on _1030/expense-ec: d621525d fix: bug fixed
// stash@{2}: WIP on _1030/expense-ec: 8bebefb0 fix: bug fixed
// stash@{3}: WIP on _1030/expense-ec: ab7180a2 fix: bug fixed

show

git stash show
// 显示做了哪些改动, 默认show第一个存储,如果要显示其他存贮, 后面加stash@{$num}
// 比如第二个 git stash show stash@{1}

git stash show -p
// 显示第一个存储的改动(改动的详情)
// 如果想显示其他存存储
// eg. git stash show -p stash@{$num} $num为第几个存储

apply

git stash apply
// 应用某个存储, 但不会把存储从存储列表中删除看, 默认使用第一个存储, 即stash@{0}
// 如果要使用其他存储
// eg. git stash apply stash@{$num} $num为第几个存储

pop

git stash pop
// 命令恢复之前缓存的工作目录,将缓存堆栈中的对应stash删除,并将对应修改应用到当前的工作目录下, 默认为第一个stash, 即stash@{0},
// 如果要应用并删除其他stash
// eg. git stash pop stash@{$num} $num为第几个存储

drop

git stash drop stash@{$num}
// 丢弃stash@{$num}存储,从列表中删除这个存储

clear

git stash clear
// 删除所有缓存的stash