问题原因:
其实也不是最近,就是之前就碰到过这个问题,那就是我正在新分支开发新功能,开发程度还没有到可以commit的程度,我不想提交(因为有些功能没有完全实现,而且没有自测的话很容易有问题,提交了之后看修改过的代码也不方便,而不提交又不能切换分支。),这时候生产环境有紧急问题需要改bug,那我要怎么在不提交代码的情况下切换分支去修改bug呢?(我以前的做法就是直接在新功能的分支上提交一下代码,然后再切到有bug的分支上,其实这样也没啥,就是对自己要求高了之后,感觉不应该在提交记录中存在一次这样的记录)因此git stash应运而生,就可以解决这个情况。
介绍:
git stash :
它会保存当前工作进度,会把暂存区和工作区的改动保存到一个未完结变更的堆栈中;
执行完这个命令后,再运行 git status
命令,就会发现当前是一个干净的工作区,没有任何改动。
备注:git stash并不会把代码提交到远程仓库,如果需要添加备注说明可以用下面这个:
git stash save '备注'
相关命令:
//查看所有隐藏, 每一行的冒号前面的字符串就是标识此隐藏的id
git stash list
// 重新显示标识为 id 的隐藏(list中不会删掉记录)
git stash apply + id
//git apply恢复隐藏后, 需要手动删除 list 列表中的记录
git stash drop + id
//恢复最新的进度到工作区 (list中会删掉恢复id的那一条记录)
git stash pop
//恢复指定的进度到工作区
git stash pop + id
一般使用经验:
(1)一般的话其实只会有一条记录即可,但是还是应该先用git stash list看一下stash的记录
避免出错。例如有以下四条记录:
如果想回到3版本,就使用:
git stash apply 3
这时候其他版本不想要了,就删掉即可,3版本恢复之后也可以把list中的3也删除掉。
git stash drop 0
git stash drop 1
git stash drop 2
(2)所以一般的流程就是:先git stash一下,然后git branch 查看分支,再然后git checkout去切换分支,然后改bug,完了提交。最后切换来新功能分支,在使用git stash list 先查看,接着git stash apply (+id)(或者git stash pop(+id))去恢复代码即可。
(3)注意git stash apply和git stash pop的区别(这个看个人习惯,其实我们项目中放在stash 里面估计也就一条记录,所以恢复完直接删掉也行
(4)补充一下:如果list中的记录比较多,可以使用git stash clear一键全清除,但是要谨慎哦。
总结:
现在可以去test一下,敲一遍就明白区别了。
补充:2024.7.01:今天又知道了一件事情,亲身踩坑。。。
git stash list 看到的暂存的记录是各个分支公用的,都可以看见的,你在a分支创建的暂存的一条记录,切换到b分支也同样是可以看到的,同时。你在b分支删除这条记录,那么回到a分支,这个记录也会不见。