在平常开发中,我们经常会遇到正在开发一个功能的时候, 遇要紧急修复某些bug, 或是紧急上线一些新特性, 当前分支上已经写的代码不完整不适合提交, 但是又不能丢弃, 此时我们就可以使用 git stash 来救场:
假设当前我们处于 feature-login-page 分支, 有几个零散的改动, 可以使用 git stash save -u 把当前所有内容存起来
git stash save -u
此时所有代码改动均已被 git 存起来了, 不放心可以检查一下
git status
On branch feature-login-page
nothing to commit, working tree clean
分支上没有未提交的改动了, 可以放心地检出新分支进行开发了
git checkout develop
git pull
git checkout -b bugfix-xxx
经过短暂时间的开发 分支 bugfix-xxx 的内容已开发完毕, 且推送到远程仓库了, 我们就可以切回刚才的 feature-login-page 分支, 继续开发了.
git checkout feature-login-page
git stash pop
git stash pop 命令把我们刚才存起来的改动又重新放回了git的工作区, 现在, 就可以愉快地继续开发了
更多的用法
git stash save -u
git stash save -m "临时保存登录页的改动"
git stash save -a
git stash save 存储临时的改动时, 默认只会存储已跟踪的文件, 我们可以加上一些参数增加它的功能.
-u 表示 untracked files, 会跟踪未提交过的文件,
-m 表示 message, 可以为本次的存储添加信息,方便识别存储的内容,
-a 表示 all, 会把所有本次改动的文件都存储起来, 包括 gitignore忽略的文件
git stash pop
git stash list
git stash apply stash@{id}
git stash 支持存储多次的内容, 所以可以用 git stash list 查看已存储的内容
git stash apply 则是 git stash pop 的进阶版, 后面跟 stash@{id} 来弹出对应的 id 的存储内容, 应用到当前分支
git stash drop stash_id
git stash clear
git stash drop 则是删除指定id 的存储内容 git stash clear 清除所有存储内容,请慎用