需求分析spa
人和电脑同样,会遇到中断,须要保存如今的上下文转而去处理其余更紧急的事情。咱们在使用git的时候也会遇到这样的状况。当在须要紧急处理一个bug时,工做区内容又没有完成,不适合提交,想暂存起来。code
方案实施htm
git提供了git stash命令来解决这样的需求。下面咱们作一个完整实验来体验一下:rem
生成测试环境get
// 初始化仓库,进行一次提交 # git init stash-test # cd stash-test && echo 'hello'> readme # git add . && git commit -m "init" // 修改工做区和暂存区 # echo 'need to be stashed' >> readme # git add readme // 查看此时工做区和版本库区别 # git diff HEAD diff --git a/readme b/readme index ce01362..55d6c28 100644 --- a/readme +++ b/readme @@ -1 +1,2 @@ hello +need to be stashed
执行stash及恢复
// 暂存当前状态 # git stash // 查看当前工做区和版本库区别 # git diff HEAD ==> 此时什么都没有输出,说明工做区被重置为HEAD指向内容了 // 显示已暂存列表 # git stash list stash@{0}: WIP on master: 440e976 init // 恢复暂存区和工做区进度 # git stash pop --index stash@{0} // 查看工做区和版本库区别 # git diff HEAD diff --git a/readme b/readme index ce01362..55d6c28 100644 --- a/readme +++ b/readme @@ -1 +1,2 @@ hello +need to be stashed
哒哒~~以前的工做又回来啦
命令详解
注:
[]方括号中内容为可选,[<stash>]里面的stash表明进度的编号形如:stash@{0}, <>尖括号内的必填
git stash 对当前的暂存区和工做区状态进行保存。
git stash list 列出全部保存的进度列表。
git stash pop [--index] [<stash>] 恢复工做进度
--index 参数:不只恢复工做区,还恢复暂存区 <stash> 指定恢复某一个具体进度。若是没有这个参数,默认恢复最新进度 如:如下命令恢复编号为0的进度的工做区和暂存区 # git stash pop --index stash@{0}
git stash [save message] [-k|--no-keep-index] [--patch]
这是git stash保存进度的完整命令形式 使用save能够对进度添加备注 # git stash save "这是保存的进度" 如今执行list,会发现后面会出现自定义的被合租 # git stash list stash@{0}: On master: 这是保存的进度 -k和--no-keep-index指定保存进度后,是否重置暂存区 --patch 会显示工做区和HEAD的差别,经过编辑差别文件,排除不须要保存的内容。和git add -p命令相似
git stash apply [--index] [<stash>] 不删除已恢复的进度,其余同git stash pop
git stash drop [<stash>] 删除某一个进度,默认删除最新进度
git stash clear 删除全部进度
git stash branch <branchname> <stash> 基于进度建立分支