问题描述
假设有这样一个场景需求:
- 某一天,我们正在自己的开发分支上愉快的写代码
- 突然
产品强者
找到我们,说客户要求在生产环境上给首页加上一个阴影,好看一些 - 要立刻,马上加!
- 但是我们自己的开发分支上代码还没有开发完
- 我们不想去
git add ./
再git commit -m 'xxx'
(不想去增加提交记录) - 但是我们如果直接切换到生产分支,当下还没有写完的代码就会被overwritten(容易丢失当下还没写完的代码)
- 此时,
git stash
命令就闪亮登场啦...
操作演示步骤
- 我们知道
Git
是命令行代码工具,用于管理我们的开发代码 - 基于这个底层工具,一些大佬研发出一些可视化的
Git管理插件
(如在vscode
中使用) - 笔者的习惯是使用命令行
Git
操作,搭配GitLens — Git supercharged
可视化Git
插件 - 下面笔者将在
vscode
编辑器中,结合GitLens — Git supercharged
插件去演示场景需求
下载GitLens — Git supercharged插件
笔者也推荐大家使用这个可视化Git
工具,虽然不怎么用这个可视化工具操作代码,不过用于看自己提交的代码操作,还是比较直观的。
vscode拓展下载
下载成功
演示操作图解
假设有两个分支,git branch
查看一下
我们当下在dev
分支愉快地写代码呢
// 原来代码
console.log('我是开发分支')
console.log('我是开发分支')
console.log('我是开发分支')
// 写了一半,写成了
console.log('愉快地写代码')
console.log('愉快地写代码')
console.log('愉快地写代码')
当我们想要直接切换分支时,git
会有对应错误警告,因为代码还没add
还没commit
呢
error: Your local changes to the following files would be overwritten by checkout:
home.js
Please commit your changes or stash them before you switch branches.
Aborting
/*
错误:切换分支时将覆盖对以下文件的本地更改:home.js
请在切换分支之前提交更改或将其隐藏。
正在中止
*/
大家看到了吧,实际上Git
已经对我们进行提示了,不要直接切换分支,否则就给你写的代码覆盖掉。当然你可以add commit
以后再切换,或者执行stash
相关命令将其隐藏。
我们可以执行命令git stash save "注释"
将写了一半的代码隐藏起来,如下图:
也可以看STASHES
中的详情
然后可以执行git status
查看状态,发现工作树干净了,可以切换分支了
然后我们git checkout master
,进行主分支代码修改,操作完毕以后,再切回dev分支
上,再执行git stash pop
命令,将我们刚刚隐藏在STASHES
中的修改代码再弹出来
即可继续愉快地写代码啦...,如下图:
git stash代码总结
将未写完的代码,隐藏到隐藏区,建议使用第一条,可以加一点注释,以便于回过头来查看(虽然二者是一个意思)
git stash save "注释"
(保存加注释隐藏)git stash
(保存不加注释隐藏)
将隐藏区的代码取出来,恢复原样,建议使用第一条,取出即删除,不会产生冗余代码(相当于只有一份,丢进去,再拿出来);第二条相当于复制一份拿出来
git stash pop
(取出并删除STASHES
中的隐藏内容)git stash apply
(取出不删除STASHES
中的隐藏内容)
再搭配GitLens Git supercharged
插件可视化看效果,可以解决99%的代码未写完需要切换分支的需求。实际上git-stash
可以命令也是非常多的,上述文章基本够用了,不够用的话我们再去看官方文档
官方文档地址: https://git-scm.com/docs/git-...
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。