GIT STASH命令

git是一个非常好用的版本控制仓库,在开发代码的时候经常会碰到这种情景:写着写着代码,你的同事过来告诉你,有一个bug需要停下手头的工作立即修复,那当前这些未提交的代码怎么办呢?提交吧,又没写完,不提交吧,这些修改又会丢失。之前使用SVN的时候我会先将做过修改的文件备份出来,进行bugfix之后再将备份出来的文件合并进去。现在有了git,可以非常方便地使用git stash命令。

git stash命令可以将当前的修改先存起来,再将代码变更为HEAD,等操作完毕又可以将存起来的修改释放出来。stash是储存贮存的意思,很形象,可以方便的将代码贮存下来以备后用。

git stash一共有9个子命令:

  1. git stash list
  2. git stash show
  3. git stash drop
  4. git stash popgit stash apply
  5. git stash branch
  6. git stash push,push可缺省
  7. git stash clear
  8. git stash create
  9. git stash store

注:在旧版本中是没有git stash push命令的,而是git stash save,两个用法基本一样,git stash save不支持对某个文件的stash,新版本这两个命令都支持。

最常用的是pushpop,其次是showlistcleardrop,剩下的branchcreatestore我很少用。

git stash的各个子命令

git stash push

push子命令,看名字也能知道这个命令是用来将本次未存档的压入到贮存栈中,在存档之后,会将所有修改恢复到HEAD提交。

将修改内容存档并添加注释信息:

git stash push -m "comment message"

# save命令在最后跟上注释信息即可,无需加-m
git stash save "comment message"

将指定文件的修改内容存档:

git stash -m "stash a single file" path/to/file
# save命令不能单独将指定文件存档

git stash pop

有了push自然要有poppop命令是将最近一次存档的修改释放出来,并将其从存档库中移除。

git stash pop

# 上面这行命令是下面的简写,stash@{0}即为最近一次的存档
git stash pop stash@{0}

# 将前一次存档的修改释放出来
git stash pop stash@{1}

# 上面一行可以简写为:
git stash pop 1

git stash apply

apply命令是将最近一次存档的修改释放出来,但不从存档库中移除

git stash list

list命令可以看到所有存档的修改。

执行命令可以看到诸如下图的结果

BaiduHi_2018-1-25_21-19-28.png

stash@{0}为最近一次的修改,按jl可以上下滚动,q退出,WIPwork in progress的缩写。

下面#后面是产生本行文本的命令

stash@{0}: On master: third m # git stash push -m "thrid m"
stash@{1}: WIP on master: 9180057 first commit # git stash push
stash@{2}: WIP on master: 9180057 first commit # git stash push

git stash show

show命令可以看到每个存档的修改内容。

# 查看最近一次修改的内容
git stash show

# 查看最近一次修改的内容
git stash show stash@{0}

# 查看前一次修改的内容
git stash show stash@{1}

执行命令可以看到诸如下图的结果

BaiduHi_2018-1-25_21-42-40.png

可以看到存档的修改添加了如下两行

# modify1

git stash drop

drop命令可以将存档库中某次存档的修改从库中删除。

# 移除最后一次存档的修改
git stash drop

# 移除最后一次存档的修改
git stash drop stash@{0}

# 移除前一次存档的修改
git stash drop stash@{1}

# git stash drop 1 这种用法是错误的

git stash clear

clear命令可以清空所有存档的修改。

git stash clear

Git Stash的完整用法

git stash list [<options>]
git stash show [<stash>]
git stash drop [-q|--quiet] [<stash>]
git stash ( pop | apply ) [--index] [-q|--quiet] [<stash>]
git stash branch <branchname> [<stash>]
git stash [push [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]
         [-u|--include-untracked] [-a|--all] [-m|--message <message>]]
         [--] [<pathspec>…​]]
git stash clear
git stash create [<message>]
git stash store [-m|--message <message>] [-q|--quiet] <commit>

Reference

  1. https://git-scm.com/docs/git-stash
Last modification:January 9, 2020
If you think my article is useful to you, please feel free to appreciate