使用 git stash 更好地管理分支

249 阅读2分钟

在平常开发中,我们经常会遇到正在开发一个功能的时候, 遇要紧急修复某些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 清除所有存储内容,请慎用