git stash 的用法

646 阅读2分钟

常用git stash命令

  1. git stash save "save message":执行存储时,添加备注,方便查找,只有git stash也要可以的,但查找时不方便识别。
  2. git stash list:查看stash了哪些存储。
  3. git stash show:显示做了哪些改动,默认show第一个存储,如果要显示其他存贮,后面加stash@{$num},比如第二个git stash show stash@{1}
  4. git stash show -p:显示第一个存储的改动,如果想显示其他存存储,命令:git stash show stash@{$num} -p,比如第二个:git stash show stash@{1} -p
  5. git stash apply:应用某个存储,但不会把存储从存储列表中删除,默认使用第一个存储,即stash@{0},如果要使用其他个,git stash apply stash@{$num},比如第二个:git stash apply stash@{1}
  6. git stash pop:命令恢复之前缓存的工作目录,将缓存堆栈中的对应stash删除,并将对应修改应用到当前的工作目录下,默认为第一个stash,即stash@{0},如果要应用并删除其他stash,命令:git stash pop stash@{$num},比如应用并删除第二个:git stash pop stash@{1}
  7. git stash drop stash@{$num}:丢弃stash@{$num}存储,从列表中删除这个存储。
  8. git stash clear:删除所有缓存的stash。 说明:新增的文件,直接执行stash是不会被存储的,举例如下: image.png
    git status可以看到修改了a.txt,新增了b.txt,接着执行git stash,再执行git stash list可以看到刚才的stash已存储。执行git stash show发现只显示了a.txt的改动被存储起来了。git status看到b.txt仍然在工作区。

这说明b.txt没有被存,原因是没有在git版本控制中的文件,是不能被git stash存储的。

那要怎么办呢,这个文件我也想存起来,很明显,先执行下git add加到git版本控制中,然后再git stash就可以了,操作如下: image.png
这个时候,想切分支就再也不会报错有改动未提交了。
如果要应用这些stash,直接使用git stash apply或者git stash pop就可以再次弹出来了。

总结下:git add只是把文件加到git 版本控制里,并不等于就被stash起来了,git addgit stash没有必然的关系,但是执行git stash能正确存储的前提是文件必须在git版本控制中才行。

stash部分文件

常规git stash的会一下暂存所有的文件。有时只备份某些文件更为方便,让另外一些与代码库保持一致。用个很有用的技巧可以使用:

  1. git add那些你不想备份的文件(例如:git add file1.js, file2.js
  2. 调用git stash –keep-index。只会备份那些没有被add的文件。
  3. 调用git reset取消已经add的文件的备份,继续自己的工作。 git stash –keep-index无法存储不在git版本控制中的文件(没有add过的文件),此时可以分成两次stash。

参考链接: www.cnblogs.com/zndxall/arc…