Git stash系列详解和使用
有的时候项目中需要不停的切换分支,那我们已经修改的代码还不想提交,用什么方法既不用提交自己的代码成功切换分支呢?
下面就介绍下git stash的系列用法,stash在英文意思是隐藏,git stash 的作用也是隐藏未完成的代码,防止它干扰别人或者新分支的工作。
1、git stash
git stash将本地没提交的内容(git commit的内容不会被缓存 但git add的内容会被缓存)进行缓存并从当前分支移除,缓存的数据结构为堆栈,先进后出。
git stash 可以多次使用,每次使用都会新加一个stash@{num},num是编号。
其中git stash与git stash save是一样的,将没有提交的内容缓存并移除,而这条缓存名称为最新一次提交的commit -m的内容,如果没有本地提交则是拉远程仓库是的commit内容。
git stash save “xxxxxxxxxxx”,加上自己缓存的注解,便于查找(不过在使用的情况来看,没啥用,因为git stash会标注最新commit的内容,在vscode中使用Git Graph插件更能直观的了解)
2、git stash list
git stash list的作用是查看stash了哪些存储,每一行的冒号前面的字符串就是标识此隐藏的id
3、git stash pop
命令恢复之前缓存的工作目录,将缓存堆栈中的对应stash删除,并将对应修改应用到当前的工作目录下,默认为第一个stash,即stash@{0},如果要应用并删除其他stash,命令:git stash pop stash@{$num} ,比如应用并删除第二个:git stash pop stash@{1}
4、git stash apply
git stash apply和git stash pop功能类似,但不会把存储从存储列表中删除(pop命令将缓存弹出来应用并且删除这条应用的缓存,而apply不会删除,你分支切换回来他还在),默认使用第一个存储,即stash@{0},如果要使用其他个,git stash apply stash@{$num} , 比如第二个:git stash apply stash@{1}
5、git stash show
git stash show显示做了哪些改动,默认show第一个存储,如果要显示其他存贮,后面加stash@{KaTeX parse error: Expected 'EOF', got '}' at position 4: num}̲,比如第二个 git stas…num} -p ,比如第二个:git stash show stash@{1} -p
6、git stash drop stash@{$num}
git stash drop stash@{ $ num}丢弃stash@{$ num}存储,从列表中删除这个存储。如果你就缓存了一个,直接使用git stash drop即可,如果多条,需要加上后面的数量参数。
同时需要注意,如果你使用git stash pop,他会自己删除缓存,但是你使用的如果是git stash apply,需要手动删除 list 列表中的记录(即drop -p)
7、git stash clear
git stash clear也是删除命令,不过他是删除所有缓存的stash,还是要慎用!
8、git stash branch
git stash branch指定或最新缓存创建分支,but这个命令我没咋用过!
9、需要注意的是!!!
新增的文件,直接执行stash是不会被存储的,没有在git 版本控制中的文件,是不能被git stash 存起来的
stash后新增的文件并没有进入缓存,这是因为git还没有追踪这个新增的文件,所以需要进行git add [文件名]让git追踪这文件,再进行stash就可以对新文件进行操作。
git add 只是把文件加到git 版本控制里,并不等于就被stash起来了,git add和git stash 没有必然的关系,但是执行git stash 能正确存储的前提是文件必须在git 版本控制中才行。
平时使用比较多的是git stash apply,其他的用的比较少,写到这里仅仅是做记录,另外推荐大家使用vscode的Git Graph插件,更加直观的看到缓存列表!!!
参考:
https://www.cnblogs.com/zndxall/archive/2018/09/04/9586088.html