stash
在英文意思是隐藏。 git stash
的作用也是隐藏没完成的代码,防止它干扰 别人或者 新分支的工作。
一、背景
正在
dev
分支开发新功能,做到一半时有人过来反馈一个bug
,需要马上解决,但是新功能做到了一半你又不想提交。
这时就可以使用 git stash
命令先把当前进度保存起来,然后切换到另一个分支去修改 bug
;修改完提交后,再切回 dev
分支,使用 git stash pop
来恢复之前的进度继续开发新功能。
看到这里,有些小伙伴就有疑问:没必要啊,修 BUG
的时候,直接切换分支,修改完提交后再切回来到原来的分支不就行了。
-
比如有情景如下:
-
如果你试试你再试试:
这时候,我不禁想说: git stash,YYDS !
二、git stash
当你执行 git stash
时会提醒你:
Saved working directory and index state WIP on newF2: b63fbcb add dev_file.txt
HEAD is now at b63fbcb add dev_file.txt。
它已经把 dev_file.txt
保存好了。
它会保存当前工作进度,会把暂存区和工作区的改动保存到一个未完结变更的堆栈中;执行完这个命令后,在运行 git status
命令,就会发现当前是一个干净的工作区,没有任何改动。
git stash
是本地的,不会上传到服务器上;- 可以通过使用
git stash save 'message...'
可以添加一些注释。
命令名 作用 git stash 隐藏当前的工作现场, 此时, git status的结果是 clean git stash list 查看所有隐藏, 每一行的冒号前面的字符串就是标识此隐藏的id git stash apply 重新显示标识为 id 的隐藏 git stash drop git apply恢复隐藏后, 需要手动删除 list 列表中的记录 git stash pop 恢复最新的进度到工作区 git stash pop stash@[stash_id] 恢复指定的进度到工作区
如:
git stash pop stash@{1}
。stash_id
是通过git stash list
命令得到的;
三、git stash 使用场景
我在本地修改好后,发现远程分支已经被改动了,此时我本地也被改动了就造成了冲突,无法
push
或者pull
。
此时,就可以用 git stash
来处理
// 把本地的改动暂存起来
git stash
// 拉取远程分支(此时本地分支会回滚到上次commit的情况,你的改动都存在stash中)
git pull
// 将stash中改动重新加回本地分支,就可以继续修改了,当然,如果改好了就是add,commit,push
git stash pop
例如忘记切换,将代码写错了分支,直接在
master
分支上做改动,这里假设我的分支是feature/category_vechice
分支。
// 把本地当前改动暂存起来,此时master分支就恢复到了上次拉取时的状态
git stash
// 切换到需要改动的分支
git checkout test
// 将改动pop到自己当前的分支
git stash pop
四、小结
顾名思义,
stash
就是一个栈,平时我们把需要暂存的文件存到栈中,把代码恢复到上次拉取的状态以进行操作。
就我个人使用而言, git stash pop
就已经满足日常需要了,毕竟频繁的线上 bug
或者忘记切代码啥的,我们应该考虑的不是这个命令的问题,是开发质量的范畴了。
Original: https://www.cnblogs.com/VanFan/p/15542582.html
Author: 风尘博客
Title: 【Git 系列】一个超好用的命令你会用吗?
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/573554/
转载文章受原作者版权保护。转载请注明原作者出处!