Git不暂存提交代码也能切换到别的分支(vs code搭配GitLens Git supercharged看效果)

问题描述

假设有这样一个场景需求:

  • 某一天,我们正在自己的开发分支上愉快的写代码
  • 突然产品强者找到我们,说客户要求在生产环境上给首页加上一个阴影,好看一些
  • 要立刻,马上加!
  • 但是我们自己的开发分支上代码还没有开发完
  • 我们不想去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分支愉快地写代码呢

1
2
3
4
5
6
7
8
9
// 原来代码
console.log('我是开发分支')
console.log('我是开发分支')
console.log('我是开发分支')

// 写了一半,写成了
console.log('愉快地写代码')
console.log('愉快地写代码')
console.log('愉快地写代码')

当我们想要直接切换分支时,git会有对应错误警告,因为代码还没add还没commit

1
2
3
4
5
6
7
8
9
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-…