背景
在使用Git开发时,开发者在自己的分支上进行开发,由于需要紧急开发一个新的分支,而当前手里的完成的工作还不能合并。
此时,使用git stash命令可以将当前做过的修改从工作区保存到暂存区中。
常用命令
添加改动到stash
git stash [save [--patch] [-k|--[no-]keep-index] [-q|--quiet]
[-u|--include-untracked] [-a|--all]
[<message>]]
当前在jason分支上,我修改a.php文件,并增加了一个untracked files:
1.如果没有untracked files,即:
git stash
2.如果需要在保存工作进度的时候使用指定的说明,必须使用如下格式:
git stash save "message"
3.使用参数–patch会显示工作区和HEAD的差异,通过对差异文件的编辑决定在进度中
最终要保存的工作区的内容,通过编辑差异文件可以在进度中排除无关内容。
4.使用-k或者–keep-index参数,在保存进度后不会将暂存区重置(默认会将暂存区和工作区强制重置,即命令:–no-keep-index的效果)
5.使用-u|–include-untracked,同时储藏未跟踪文件。不影响被忽略的文件
git stash save -u|--include-untracked
6.使用-a|–all来储藏所有的改动,包括未跟踪文件。不仅仅把新加入的代码文件放入暂存区,还会把用.gitignore忽略的文件放入暂存区
git stash save -a|--all
查看已经保存的储藏列表
$ git stash list
stash@{0}: On jason: save change msg
删除储藏
如果没有指定是第几个储藏时,默认会删除最近的一次储藏
git stash drop [-q|--quiet] [<stash@{n}>]
删除所有的储藏
git stash clear
误删除储藏恢复
1. git fsck --lost-found # 查看最近移除的文件
2. git show <commit id> # 查看dangling commit的id,看看是否是自己想要的
3. git stash apply <commit id> # 执行后即可恢复
查看[某次]储藏修改的内容
若参数[<stash@{n}>]不加,表示查看最后一次的储藏
git stash show [<stash@{n}>]
恢复保存的工作进度
git stash <pop | apply> [--index] [-q|--quiet] [<stash@{n}>]
如果不使用任何参数,恢复最近一次保存的工作进度
git stash pop #会从储藏列表中删除刚刚恢复的暂存
git stash apply #不会从储藏列表中删除刚刚恢复的暂存
如果使用<stash@{n}>参数,则从该<stash@{n}>中恢复保存的内容
git stash pop <stash@{n}> #会从储藏列表中删除该`<stash@{n}>`
git stash apply <stash@{n}> #不会从储藏列表中删除该`<stash@{n}>`
–index除了恢复工作区的文件外,还会恢复暂存区的内容
git stash pop --index
git stash apply --index
使用储藏的内容创建新的分支
git stash branch <branch-name> [<stash@{n}>]
查看储藏列表的SHA-1值
$ git reflog show refs/stash
60a3985 refs/stash@{0}: On jason: save change msg
参考资料
1.Git操作