Git——功能——stash

  stash类似于数据结构的栈区,主要应用场景是当想切换分支时,工作目录是脏的(即有修改,还未提交),此时可以临时存储在栈区中,之后分支切换回来,在恢复为之前的工作空间。

  注:临时存储的栈区容易被遗忘,所以创建时指定message选项。

  栈区的操作有:元素的增,删,查。栈区的清空。

  官网链接:https://git-scm.com/docs/git-stash,或者在本地输入git stash --help。

1、元素

  增,删,改,查

 1.1  保存

  执行git stash命令或git stash save命令会存储元素。它的语法格式如下:

git stash [push [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]
          [-u|--include-untracked] [-a|--all] [-m|--message <message>]
             [--pathspec-from-file=<file> [--pathspec-file-nul]]
             [--] [<pathspec>…]]

  显示的结果如下:

$ git stash 
saved working directory and index state WIP on master: cf58f6f 解决dev分支合并到master分支的冲突

  冒号之前的部分为固定的字符串,表示stash存储了工作目录和索引中变更。冒号后面的部分为参照版本库对应的Commit信息,ID,msg。

  WIP全称为work in progress,指进行中的工作

  选项:

  -q,quiet, -p patch, -pathspec-from-file, -pathspec-from-nul, -pathspec是公共的选项

  -m:stash的操作日志信息。

  文件类型有三种,被忽略的,未追踪的,已追踪的。

  -a:包含所有的文件,包括被忽略的文件。

  -u:包含未追踪的文件。

  -k:不缓存已经暂存的内容

  1.2  查看

  执行git stash show查看单个元素,它的语法格式为:

git stash show [<options>] [<stash>]

  stash标识,执行git stash show stash@{0}的结果如下:

A.txt | 1 +
 1 file changed, 1 insertion(+)

  显示的结果与git diff --cached差不多,是索引与当前提交对象比较之后的变更集。

 1.3  取出

  执行git stash pop或apply恢复工作目录和INDEX。pop与apply的区别在于pop会取出栈顶的元素并删除,apply只取出栈顶的元素。

  -q || quiet:不打印任何日志信息。

  <stash>:stash的标识,例如stashh@{0},它由三部分组成,stash,@,{number},其中number类似于栈的索引。

  执行git stash apply,之后查询git stash list,会发现stash@{0}还在。执行git stash pop,之后查询git stash list,stash@{0}已被删除。

 1.4  删除

  执行git stash drop移除栈中的元素,它的语法格式为:

git stash drop [-q|--quiet] [<stash>]

  -q | quiet选项不打印任何输出内容。

  stash为元素的标识

2、栈区

  查看,清空。

 2.1  查询

  git stash list的命令格式为

git stash list [<options>]

  它用于查询stash中的内容,可以把stash理解为栈,git stash list查询栈中所有元素。显示的结果如下:

stash@{0}: WIP on master: 67402fc 提交文件A.txt

 2.2  清空

  执行git stash clear清空栈。它没有任何选项

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章