一、介绍
如果修改后的内容还不想commit,就可以用git stash命令。它会将工作区和暂存区中的修改(也就是还没commit的内容)都会被保存到堆栈里,并在之后恢复到任意指定的分支上。
二、应用场景
1、在分支a进行开发feature 1时,突然需要紧急修改之前的bug。这时就可以将当前feature 1的相关内容stash起来,修改完bug后,再恢复刚刚的内容;
2、本来需要在dev分支上进行开发的内容,却不小心在master分支上进行。这时可以先stash,切换回dev分支后再pop出来即可。
三、常用命令
1、git stash
会将工作区和暂存区,也就是还没commit的内容都会被保存到堆栈里。
2、git stash pop
恢复堆栈中最新的一条内容,同时该内容也会从堆栈中删去。相当于剪切操作。
当堆栈中有多条内容时,可以通过加参数–index number来恢复特定的内容。比如恢复index=1的内容:
git stash pop --index 1
3、git stash apply
类似于git stash pop,恢复堆栈中最新的一条内容,只不过不会将内容从堆栈中删除。相当于复制操作。
适合用于多个分支的场景。
4、git stash save “note”
**stash时,如果不做一些备注,时间久了很容易忘记。而且堆栈有多条内容时也容易混淆。**所以推荐在stash时加上备注。
5、git stash list
查看堆栈中的所有内容,方便下一步操作。
特别是堆栈中存在多个内容时,可以获取内容对应的index号。
6、git stash drop
默认会删除最近存入堆栈的内容,同样也可以通过添加参数–index number 来选择性删除内容。
此处的number可以通过git stash list获得。
有时候不小心误删了怎么办?
不用担心,通过下面几步轻松找回!
a.找到删除内容的ID号。
用git stash drop命令后,会出现以下提示:
Dropped refs/stash@{0} (acf4577151935a7259937ed522901fdcde5f0e0b)
其中acf4577151935a7259937ed522901fdcde5f0e0b就是删除的ID号。
当然你也可以通过以下命令来查找最近一些删除的ID号,只不过需要加载一会儿。
git fsck --lost-found
b.查看丢弃内容是否为你要的内容:
可以直接通过
git show acf457 -p
查看修改情况,看是不是你刚刚drop的内容。
c.通过git stash apply ID 恢复
比如:
git stash apply acf457
通过上面三步,误删的内容就可以找回来啦~
7、git stash push
git stash命令会将当前工作区和暂存区中的内容一股脑压入堆栈中。但有时候我们只是想要压入某一个或几个文件,这时就可以通过下面命令选择性压入:
git stash push <file1> <file2> <file3>
其中文件之间需要用空格隔开。
其实一开始提到的git stash是git stash push的缩写。不过在进行此操作时,需要写全命令。
8、git stash clear
移除堆栈中所有的内容。
9、git stash show
显示堆栈中最新内容与当前目录内容的粗略差异。
如果想要更加看到更加详细的内容,可以加上-p
git stash show -p
如果堆栈中存在多个内容,而你想要看到之前的某一个内容和当前目录的具体差异,可以通过
git stash show --index number -p