git stash:撤销改动并储藏代码

2,474 阅读2分钟

git stash命令可以帮我们存储目前没有提交的代码,比如临时遇到了线上的bug需要紧急修复,或是误触键盘多打了几个字,这些情况都可以用到它。 后者也可以用git checkout . 放弃所有更改,这种情况是丢弃不需要找回。

1. git stash有什么作用?用在什么场景?

git stash就是把当前分支所有没有commit 的代码先暂存起来,这个时候再执行git status,会发现当前分支很干净,几乎看不到任何改动,代码改动也看不见了,但其实是暂存起来了。(后续可以恢复) 执行git stash list你会发现此时暂存区已经有了一条记录。这个时候你可以切换会其他分支,赶紧把bug修复好,然后发布。 之后一切都解决了,再切换回正在编辑的分支,继续做之前没做完的功能。

2. git stash之后,怎么还原之前已改动的代码?

git stash apply你会发现你之前的代码全部又回来了,就好像一切都没发生过一样。 紧接着你最好需要把暂存区的这次stash记录删除,执行:git stash drop就把最近一条的stash记录删除了。 还可以使用:git stash pop来代替apply命令,pop跟apply的唯一区别就是pop不但会帮你把代码还原,还自动帮你把这条stash记录删除,省的自己再drop一次了。 即:git stash pop = git stash apply(还原) + git stash drop(删除) 为了验证你可以紧接着执行git stash list命令来确认是不是已经没有记录了。

3. git stash相关命令及示例:

(1)git stash save "save message" : 执行存储时,添加备注,方便查找,只有git stash 也要可以的,但查找时不方便识别。

(2)git stash list :查看stash了哪些存储。每使用一次git stash就会增加一次,最新添加的索引是0。(感觉像栈一样,后进先出)

(3)git stash show :显示哪些文件做了改动,默认show第一个存储(即最新stash进来的),如果要显示其他存贮,后面加stash@{$num},比如第二个 git stash show stash@{1}。 结果如:

src/index.tsx |  30 ++++++-------
src/components/hello.tsx | 2++
2 files changed, 20 insertions(+),12 deletions(-)

(4)git stash show -p : 比上一个命令多了-p,显示第一个存储的j详细改动内容,显示代码的具体增删差别(和git status 之后时的 git diff 效果相似。如果想显示其他存存储,命令: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