stash解惑与妙用

在实际项目开发中,总会遇到代码写到一半(没法去打commit),去开启新的分支 修复 Bug 或者 增加功能 的情况。如果不处理,未修改的代码就会被带入临时创建的新的分支,没写完的代码 和 要修复的代码混合在一起,绝对苦逼。而 Git 中的stash就是用来对付这种情况。

1. 初识git stash

stash在英文中的意思是:隐藏。在 Git 代码管理的过程中,它的作用也是隐藏没完成的代码,防止它干扰 别人 或者 新分支的工作。

关于git stash,常用命令如下:

命令 作用
git stash 隐藏当前的工作现场, 此时, git status的结果是 clean
git stash list 查看所有隐藏, 每一行的冒号前面的字符串就是标识此隐藏的id
git stash apply 重新显示标识为 id 的隐藏
git stash drop git apply恢复隐藏后, 需要手动删除 list 列表中的记录
git stash pop Apply last stash and remove it from the list

2. 应用与实战

假设:正当我在 master 分支上写着文档时候(_没有完成、没有提交_),同事发现 hello.py 这个脚本有问题,紧急报告给我进行修复。

收到报告,下意识就是开一个 debug 分支来处理 bug。但是,现在的文档没完成,自然无法提交,又不能把没提交的东西带入到新创建的 debug 分支(_执意如此,我也没办法 : )_)。目前,status 如下:

为了达到目的,分为以下几步:

  1. 隐藏修改:git stash :
  2. 创建新分支:git branch debug :
  3. debug分支上修复 bug, 并且将修改添加到 log 中 :
  4. 回到master分支, 合并debug分支的修改, 并且删除 debug 分支 :
  5. 重新显示隐藏的stash,并且将其从stash list列表中删除 :
  6. 然后就可以愉快地继续做自己的事情啦!

感谢chucklu的提醒:上面第五步的两条命令,可以用git stash pop命令代替。

3. 拓展阅读

在实际生产过程中,难免会遇到多个 stash 的情况。此时,他们的 id 默认都是:stash{0}, stash{1}, stash{2} … …

当我们恢复一个 stash ,并且将它从 stash list 中移除的时候,在其下方的 stash 记录的 id 会自动变小,以保证 id 是从 0 到 n 的连续自然数列。所以,当从 stash list 移除一个 stash 后,一些 stash 的 id 就会发生改变。此处是个坑。

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×