大家平时开发过程中肯定遇到过这样的情况:代码写了一半,但是需要紧急修改一个bug,还是在当前项目中修改,这时怎么办呢?把写了一半的代码进行提交?可能编译还通不过,或是启动不了,要是直接提交了,就会对该项目其他开发人员产生影响。就算编译、启动都没问题,写了一半的代码也不是一个完整的、有具体意义的提交。那怎么办呢?这就引出了我们今天要了解的一个命令了:git stash。
使用场景及方式
简单来说,git stash命令的作用就是将暂存区里面的东西进行暂存。额,好像有点绕。首先必须了解什么是“暂存区”。我们的代码仓库实际上分为三个区:工作目录、暂存区、git仓库。其中工作目录中放的就是实际的文件,暂存区放的索引,git仓库里面放的是目录树(可以理解为分支链):
如上图所示,所有git add之后但还没有git commit的文件会被放入到暂存区,暂存区里面的文件才会被git跟踪到,如果新建的一个文件,这个文件没有被git add,那么git是跟踪不到这个新建的文件的。 而git stash 就是把当前暂存区内的所有文件移动到一个单独的“缓存区”里面去,这个“缓存区”是一个栈结构:
这样做之后,我们的暂存区就空出来了,此时,我们就可以去修复紧急bug,等bug修复完提交之后,再返回头来将我们“缓存区”里面的内容git unstash出来,继续开发:
这就是git stash的主要使用场景以及使用方式了。接下来我们详细看一看,这git stash这个命令的详细使用规则。
命令详解
使用 git stash save "xxx" 可以将当前暂存区里面的文件移动到缓存区里面去,可以写一些缓存说明用来标识,因为一个缓存区里面可以有多个缓存。
使用 git stash list 可以查看缓存区里面的所有缓存。
使用 git stash pop 可以将缓存区(栈结构)中最上面的一条缓存pop出来(也就是移出来,缓存区里面的这个缓存会被删除),并应用到暂存区。
使用 git stash pop "xxx" 可以将缓存区里面指定的某条缓存pop出来。
使用 git stash apply 会将缓存区(栈结构)中最上面的一条缓存应用到暂存区,注意此时不会将缓存区里面的这个缓存删除,
使用 git stash apply "xxx" 会将缓存区里面指定的某条缓存应用到暂存区。
使用 git stash drop "xxx" 可以将某条缓存进行删除。
使用 git stash clear 会将整个缓存区进行清空。