Git贮藏
贮藏
git stash
git stash 是 Git 中用于临时保存工作目录和暂存区变更的命令,适用于需要切换分支、处理紧急任务或保持工作区“干净”的场景。
git stash
git stash 默认只保存已跟踪文件(Tracked files)的修改和暂存区(Stage)的变更,不会自动保存未跟踪的文件(Untracked files)

使用git stash后,会多出2个提交,index on dev对应已已git add的修改,WIP on dev对应未git add的修改,这2个分支都基于使用git stash时所处的分支对应的最新提交。
git log --oneline --graph --all命令会绘制所有提交的关联关系,所以能看到这2个本应隐藏的提交
如果不加--all选项,则git stash所创建的2个提交不会显示

查看贮藏
查看贮藏条目
git stash list
查看贮藏记录及内容
# 简要
git stash show
# 详细
git stash show -p
# 查看指定贮藏内容
git stash show stash@{0}
git stash show -p stash@{0}
为贮藏备注
git stash push -m "xx"

贮藏指定文件
git stash push -m "xx" filename
该命令并不会仅将指定文件从工作区转移至贮藏区,虽然工作区中的该文件会被删除,但工作区中已经暂存的其他文件全部都会被复制一份到贮藏区,而且不会删除其他文件在工作区中的暂存
贮藏未跟踪的文件
git stash push -m "xx" -u
会将未跟踪(git add . )的文件也贮藏,但不会贮藏在.gitignore中忽略的文件
取出贮藏

可以看到,使用git stash pop命令后,当前的工作区状态又和git stash之前一样了
注意
可以在任意的分支上使用git stash pop命令,这就导致,原本在dev分支的最新提交之上所作的工作,在被贮藏到基于dev的贮藏区后,如果这时候切换了分支,并且使用了git stash pop命令,就会导致这些贮藏会被恢复到其他(当前所在)的分支上
使用这一点,可以跨分支转移一些内容,但也需要注意可能会被转移到不合适的分支(的最新提交)上。
贮藏的取出顺序
贮藏的存入与取出的默认顺序(仅使用git stash pop)类似于栈,先进后出,如下是连续贮藏2次

最后用git stash list命令可以看出,test记录是先贮藏的,但贮藏索引是1,test1记录是后贮藏的,贮藏索引是0,如果连续执行2次git stash pop命令,则第一次取出test1,第二次取出test
取出指定的贮藏
git stash pop stash@{n}
某一条贮藏被取出后,贮藏区里的对应记录内容会被删除
将贮藏取出但不删除
git stash apply #只会取出最新的一次暂存
git stash apply stash@{n}
删除贮藏
# 删除最新的贮藏git stash drop
# 删除指定的贮藏git stash drop stash@{n}
# 删除所有贮藏git stash clear
注意:无论哪种方法删除贮藏,都无法恢复