欢迎关注微信公众号:全栈工厂
本文主要参考
stash是我在工作中会经常用到的命令,因为我们在工作中经常会遇到临时情况,需要保留当前工作区的修改,转而去做其他代码的修改;另外我在更新分支代码的时候也习惯于先将当前工作区的代码先用stash保存起来,然后再更新分支代码,最后apply stash进行代码的冲突处理,这样做会更加的安全。stash的使用比较简单,但stash仍然有一些不常用的用法,这里我做简单总结一下。
1. 基础——道理大家都懂,就怕只有我不知道
stash命令主要用于处理工作目录杂乱的状态,即将所有工作区修改、跟踪的文件以及暂存区保持的文件打包,然后将未完成的修改保存到一个栈上。相当于将当前分支恢复到最近一次提交的状态。
来看看stash的基础用法:
- <b>git stash list </b> 查看stash列表
- <b>git stash ( pop | apply ) [<stash>] </b> 从stash栈中的某一个stash应用到当前工作区中(注:pop在应用完后会删除这个stash,apply则仍然保留)例:git stash apply stash@{0}
- <b>git stash drop [<stash>]</b> 删除指定索引的stash 例:git stash drop stash@{0}
- <b>git stash clear</b> 清空所有保存的stash列表
- <b>git stash save [<message>]]</b> 将当前工作区、暂存区的改动保存到stash栈中
- <b>git stash show [<stash>] 查看某一个stash的文件</b>
2.扩展——不常用的也要多多了解啊,以备不时之需
<b>git stash save [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet] [-u|--include-untracked] [-a|--all] [<message>]</b>
① [-p|--patch] 会显示工作区和HEAD的差异,通过编辑差异文件,排除不需要保存的内容。和git add -p命令类似。在输入git stash save -p 后,系统会提示: <b>Stash this hunk [y,n,q,a,d,/,e,?]? </b> 其中y,n,q,a,d,/,e分别表示:
<pre>
y - stage this hunk
n - do not stage this hunk
q - quit; do not stage this hunk nor any of the remaining ones
a - stage this hunk and all later hunks in the file
d - do not stage this hunk nor any of the later hunks in the file
g - select a hunk to go to
/ - search for a hunk matching the given regex
j - leave this hunk undecided, see next undecided hunk
J - leave this hunk undecided, see next hunk
k - leave this hunk undecided, see previous undecided hunk
K - leave this hunk undecided, see previous hunk
s - split the current hunk into smaller hunks
e - manually edit the current hunk
? - print help
</pre>
②[-k|--[no-]keep-index] 是否重置暂存区,默认stash save 在保存之后会重置暂存区,如果不希望重置暂存区,可以使用git stash save -k
③[-q|--quiet]终端不打印输出
④[-u|--include-untracked]把没有添加到git的文件也会保存起来(例如刚刚新建的文件)
⑤ [-a|--all] 会把忽略的文件也保存下来
注:文中如有任何错误,请各位批评指正!