GIT STASH命令
git
是一个非常好用的版本控制仓库,在开发代码的时候经常会碰到这种情景:写着写着代码,你的同事过来告诉你,有一个bug需要停下手头的工作立即修复,那当前这些未提交的代码怎么办呢?提交吧,又没写完,不提交吧,这些修改又会丢失。之前使用SVN的时候我会先将做过修改的文件备份出来,进行bugfix之后再将备份出来的文件合并进去。现在有了git,可以非常方便地使用git stash
命令。
git stash
命令可以将当前的修改先存起来,再将代码变更为HEAD
,等操作完毕又可以将存起来的修改释放出来。stash是储存贮存的意思,很形象,可以方便的将代码贮存下来以备后用。
git stash
一共有9个子命令:
- git stash list
- git stash show
- git stash drop
- git stash pop和git stash apply
- git stash branch
- git stash push,push可缺省
- git stash clear
- git stash create
- git stash store
注:在旧版本中是没有git stash push
命令的,而是git stash save
,两个用法基本一样,git stash save
不支持对某个文件的stash,新版本这两个命令都支持。
最常用的是push
和pop
,其次是show
、list
、clear
和drop
,剩下的branch
、create
和store
我很少用。
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
自然要有pop
,pop
命令是将最近一次存档的修改释放出来,并将其从存档库中移除。
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
命令可以看到所有存档的修改。
执行命令可以看到诸如下图的结果
stash@{0}
为最近一次的修改,按j
和l
可以上下滚动,q
退出,WIP
是work 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}
执行命令可以看到诸如下图的结果
可以看到存档的修改添加了如下两行
# 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>
One comment
我经常stash~ ٩(ˊᗜˋ*)و