git stash 命令详细介绍
1、git stash 命令的作用
git stash
命令能够将所有未提交的修改(工作区和暂存区)保存至堆栈中,“stash”的意思是:藏匿、贮藏。
2、git stash 命令的应用场景
场景1:当我们正在dev分支上开发某个项目,这时线上出现一个bug,需要紧急修复,但是我们正在开发的内容只是完成一半,还不想提交,这时可以用git stash
命令将修改的内容保存至堆栈区,然后顺利切换到bugfix分支进行修复。bug修复完成后,再次切回到dev分支,从堆栈中恢复刚刚保存的内容。
场景2:由于疏忽,本应该在dev分支开发的内容,我们却在master上进行了开发,需要重新切回到dev分支上进行开发,可以用git stash
将内容保存至堆栈中,切回到dev分支后,再次恢复内容即可。
总的来说,git stash
命令的作用就是将目前还不想提交的但是已经修改的内容进行保存至堆栈中,后续可以在某个分支上恢复出堆栈中的内容。这也就是说,stash中的内容不仅仅可以恢复到原先开发的分支,也可以恢复到其他任意指定的分支上。git stash
作用的范围包括工作区和暂存区中的内容,也就是说没有提交的内容都会保存至堆栈中。
3、git stash 命令的操作演示
3.1、操作步骤一:当前处于master分支,有两个修改文件未提交。
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: src/main/java/cn/mybatis/Test1.java
modified: src/main/java/cn/mybatis/Test2.java
no changes added to commit (use "git add" and/or "git commit -a")
3.2、操作步骤二:使用stash命令之后,工作区和暂存区的修改被保存到堆栈中
$ git stash
Saved working directory and index state WIP on master: b2f489c second
3.3、操作步骤三:再次查看仓库状态,仓库已经变干净
$ git status
On branch master
nothing to commit, working tree clean
4、git stash pop 代码恢复
我们在开发过程中,会经常遇到开发本期项目时,需要解决上个排期项目的bug,并且目前现在还不想提交代码。如果我们贸然切换分支会显示当前分支将会被覆盖,此时用git stash
可以将我们的代码提交到堆栈区,然后可以进行切换分支,进行bug修复。当我们解决完上期bug之后,切回到当期分支,在终端输入git stash pop
即可恢复之前代码编写的状态。如下所示:
$ git stash pop
5、git stash 命令全面总结
在上文中,我们了解了git stash的基本用法,下面针对git stash命令进行全面的总结,方便大家的学习。
5.1、git stash
保存当前的工作区与暂存区的状态,把当前的修改保存到git的堆栈区,等以后需要的时候再恢复,git stash 这个命令可以多次使用,每次使用都会新加一个stash@{num}
,其中num
是编号的意思。
5.2、git stash save '注释'
执⾏存储时,我们可以添加注释,⽅便后续查找,如下所示:
$ git stash save 'test'
5.3、git stash pop
默认恢复git栈中最新的一个stash@{num}
,建议在git栈中只有一条的时候使用,以免混乱。注:该命令将堆栈中最新保存的内容删除。
5.4、git stash list
查看当前stash的所有内容
5.5、git stash apply
将堆栈中的内容恢复到当前分支下。这个命令不同于 git stash pop。该命令不会将内容从对堆栈中删除,也就是该命令能够将堆栈的内容多次运用到工作目录,适合用与多个分支的场景。使用方法如下所示:
$ git stash apply stash@{num}
5.6、git stash drop
从堆栈中移除指定的stash,使用方法如下所示:
$ git stash drop stash@{num}
5.7、git stash clear
移除全部的stash
5.8、git stash show
查看堆栈中最新保存的stash和当前⽬录的差异,可以看到做了哪些改动。默认情况下,用当前分支的内容与第一个存储进行比较,当前我们也可以指定存储,例如:
$ git stash show stash@{0}
6、参考:
《Git入门教程》。这是一个不错的入门教程,值得分享给大家。这个教程参考Git官方文档以及网上众多Git技术博客而成,从浅入深,分析透彻,值得Git初学者和Git中级用户学习和参考。