搁置未提交的变更

git命令

之前说过了,如果你开发一个feature分支,正常情况下,都是每天去开发完一块完整的东西,某个模块,或者是某个功能,同时做完单元测试后,然后才会做一次commit的
但是如果今天你开发一个feature分支开发到一半的时候,接到一个紧急通知说,一般看,运营那边过来,互联网公司的话。比如说你做一个电商网站,app。如果有bug,是谁发现?一般来说可能都是线上在使用的用户突然发现系统或者app运行部正常了,比如说突然电商网站,怎么商品显示不出来呢?他们会打电话给客服投诉,客服会转到技术部,也可能会转到运营那儿去。
比如像我现在做的这个产品,也是公司的核心项目之一。一般有bug,客服找运营,运营直接通过一个缺陷跟踪系统来,jira。运营同学,会在jira上提一个task,工单,里面会写上详细的一些bug的信息,包括什么时间,谁反馈,截图,如何复现。指派给一个负责的RD和一个对应的QA。
RD会去看一下那个工单,尝试在本地先复现出来,然后去修复那个bug,会部署到预发布环境,让QA测试工程师同学,妹子,快速的回归一下,验证一下那个bug是否修复了。o了以后,就直接上线。
赶紧修复一个线上的bug,此时怎么办?
GitFlow工作流,修复线上bug,需要从master分支拉一个bugfix分支出来的
你手头正在开发feature分支,代码写到一半,没弄完呢
如果你此时要切换分支,在git中,是会让你先提交当前分支的代码,然后再切换分支的
你是把写到一半儿的代码给commit一下呢?还是怎么玩儿?把写到一半儿的代码就提交一个commit的话,就很坑爹,包含了一半的代码。
当然是立即从master分支拉一个bugfix分支出来了,但是问题是,如果要从feature分支切换到bugfix分支,你就必须先提交feature的代码,做一次commit,然后才能切换到bugfix分支
这就不太好了吧,feature分支开发到一半,就贸然提交一下,感觉就比较坑爹了,弄一个不伦不类的commit记录出来,违反公司规范
此时,实际上就是要用到stash功能,将feature分支开发的代码暂存起来
stash功能,其实就是将当前feature分支上对应的工作区的修改过的代码,全部暂存起来,然后将工作区的代码恢复到干净的状态,好像什么都没修改过一样
接着此时你就可以切换到master分支,拉一个bugfix分支出来,接着的话修复bug,上线,bugfix分支合并到master分支和develop分支
都搞完了之后,删除bugfix分支,同时在本地再次切换到feature分支,将之前stash起来的修改好的到吗恢复到现场,继续开发
假设我们现在在feature分支上做了一些开发,修改了一些代码,此时需要立即切换到一个bugfix分支去修复bug
此时执行一个命令:git stash
现在执行git status看一下,会告诉你工作区没有任何修改的文件
 
然后我们就可以git checkout -b bugfix/002,切换到bugfix分支快速修复问题,修复完了之后,就会合并到master分支,同时删除bugfix分支
接着我们切换回feature分支
同时我们可以查看一下stash列表:git stash list
执行命令,将最近一次stash给恢复回来:git stash apply
也可以使用git stash apply stash@{0},恢复到指定的一次stash
此外,如果执行git stash的时候,有放入了暂存区的内容,在恢复的时候需要使用git stash apply --index
也可以用git stash drop stash名称,手动删除掉某个stash
此外还有一个有用的命令,就是默认情况下,git仅仅stash那些tracked bug modified文件,但是如果要同时stash那些untracked文件,需要使用:
默认情况下,它只会将工作区中的修改的文件进行stash,modified状态。如果要将untracked和暂存区中的文件都进行stash。git stash --index --include-untracked,就是将暂存区中的内容,tracked和untracked的内容,全部进行stash暂存
git stash apply --index,就是同时将工作区和暂存区中的内容进行恢复

idea

test分支改动后未提交切换到master,提示
notion image
notion image