开发过程中经常会需要stash(贮藏)部分文件的场景,无奈sourcetree并不支持这种操作, gitkraken神器是可以的,但是现在收费了。所以只能自己动手命令行搞起来了。
参考了一下官方文档:
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>
可以看到我们最常用的
git stash
其实是
git stash push
的缩写。不过要使用这些参数的话就不能缩写了,比如你想指定一个stash的说明,你可能会这样:
git stash -m "this is a test"
但是这样是不行的,你必须要:
git stash push -m "this is a test"
可以看到push这个命令有最复杂的参数,简单说明下:
-
-p|–patch
交互式stash,每个修改逐个确认,之后不停按y/n来选择要stash的修改 -
-k|–[no-]keep-index
已经git add的文件stash之后修改还保留 -
-q|–quiet
-
-u|–include-untracked
新创建的文件直接git stash是不会被stash的,加上这个就可以 -
-a|–all
比上一个-u更强,连被git ignore的文件都可以stash -
-m|–message <message>
指定一些说明性文字 -
[--] [<pathspec>…]
指定stash的文件,但是如果其他文件有被git add过,也会被同时stash。不过只有指定的文件的修改会从工作副本中clean掉。
那么stash部分文件就有两种方式:
-
使用-p进行交互式操作(适合需要具体到修改的时候,例如某个文件中部分需要stash部分不需要)
-
通过在命令后面直接指定文件(一般情况肯定这个方便)
# 指定说明信息并stash所有java文件的修改
$ git stash push -m "this is a partly stash test" **/*.java