git stash
【Git 系列】一个超好用的命令你会用吗?
stash在英文意思是隐藏。git stash 的作用也是隐藏没完成的代码,防止它干扰别人或者新分支的工作。
一、背景
1.1 我们经常会遇到这样的情况
正在
dev分支开发新功能,做到一半时有人过来反馈一个bug,需要马上解决,但是新功能做到了一半你又不想提交。
这时就可以使用 git stash 命令先把当前进度保存起来,然后切换到另一个分支去修改bug;修改完提交后,再切回 dev 分支,使用git stash pop来恢复之前的进度继续开发新功能。
看到这里,有些小伙伴就有疑问:没必要啊,修 BUG 的时候,直接切换分支,修改完提交后再切回来到原来的分支不就行了。
1.2 真的要这么麻烦吗?
- 比如有情景如下:
- 在
dev分支下创建一个文件dev_file.txt,并add,让它stage; - 这时切到
master分支,你会看到这个dev_file.txt居然也在master分支里。他不是应该只在dev分支吗?
- 如果你试试你再试试:
- 切回
dev分支,执行git stash; - 这时你在切回
master分支,dev_file.txt就消失了。
这时候,我不禁想说: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 保存好了。
2.1 git stash 干了什么
它会保存当前工作进度,会把暂存区和工作区的改动保存到一个未完结变更的堆栈中;执行完这个命令后,在运行git status命令,就会发现当前是一个干净的工作区,没有任何改动。
git stash是本地的,不会上传到服务器上;- 可以通过使用
git stash save 'message...'可以添加一些注释。
2.2 git stash 相关命令
| 命令名 | 作用 |
|---|---|
| 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 使用场景
3.1 有人与我改动同一分支
我在本地修改好后,发现远程分支已经被改动了,此时我本地也被改动了就造成了冲突,无法
push或者pull。
此时,就可以用 git stash 来处理
// 把本地的改动暂存起来
git stash
// 拉取远程分支(此时本地分支会回滚到上次commit的情况,你的改动都存在stash中)
git pull
// 将stash中改动重新加回本地分支,就可以继续修改了,当然,如果改好了就是add,commit,push
git stash pop
3.2 不小心改动了其他分支
例如忘记切换,将代码写错了分支,直接在
master分支上做改动,这里假设我的分支是feature/category_vechice分支。
// 把本地当前改动暂存起来,此时master分支就恢复到了上次拉取时的状态
git stash
// 切换到需要改动的分支
git checkout test
// 将改动pop到自己当前的分支
git stash pop
四、小结
顾名思义,
stash就是一个栈,平时我们把需要暂存的文件存到栈中,把代码恢复到上次拉取的状态以进行操作。
就我个人使用而言,git stash pop 就已经满足日常需要了,毕竟频繁的线上 bug 或者忘记切代码啥的,我们应该考虑的不是这个命令的问题,是开发质量的范畴了。
本文来自博客园,作者:长情不羁的五年,转载请注明原文链接:https://www.cnblogs.com/grlend/p/15547963.html

浙公网安备 33010602011771号