【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 或者忘记切代码啥的,我们应该考虑的不是这个命令的问题,是开发质量的范畴了。
【Git 系列】一个超好用的命令你会用吗?的更多相关文章
- Git 系列(三):建立你的第一个 Git 仓库
现在是时候学习怎样创建你自己的 Git 仓库了,还有怎样增加文件和完成提交. 在本系列前面的文章中,你已经学习了怎样作为一个最终用户与 Git 进行交互:你就像一个漫无目的的流浪者一样偶然发现了一个开 ...
- Git 系列(二):初步了解 Git
在这个系列的介绍篇中,我们学习到了谁应该使用 Git,以及 Git 是用来做什么的.今天,我们将学习如何克隆公共 Git 仓库,以及如何提取出独立的文件而不用克隆整个仓库. 由于 Git 如此流行,因 ...
- Git系列②之部署企业级开源仓库gitlab服务器
Git系列②之部署企业级开源仓库gitlab服务器 上一篇我们介绍了github的常见使用方法,下面开始部署本地开源仓库gitlab GitLab 是一个用于仓库管理系统的开源项目. 1.安装配置gi ...
- 搭建一个超好用的 cmdb 系统
10 分钟为你搭建一个超好用的 cmdb 系统 CMDB 是什么,作为 IT 工程师的你想必已经听说过了,或者已经烂熟了,容我再介绍一下,以防有读者还不知道.CMDB 的全称是 Configurati ...
- Git系列教程三 配置与基本命令
一.安装Git 网上有很多安装教程,可以参考.这里使用的是Windows版本的Git,点击这里下载. 二.基本设置 安装完成后,通过点击鼠标右键就可以看到新添加了俩个Git命令:Git GUI Her ...
- Aoite 系列(02) - 超动感的 Ioc 容器
Aoite 系列(02) - 超动感的 Ioc 容器 Aoite 是一个适于任何 .Net Framework 4.0+ 项目的快速开发整体解决方案.Aoite.Ioc 是一套解决依赖的最佳实践. 说 ...
- git查看一个文件的历史记录
git log --all -- '*'FILENAME'*' 支持模糊查询 主要用于查找历史上被删除的文件 可以做成git的一个快捷命令 find = "!f(){ git log --a ...
- 【Xamarin挖墙脚系列:Android最重要的命令工具ADB】
原文:[Xamarin挖墙脚系列:Android最重要的命令工具ADB] adb工具提供了很好的基于命令的对系统的控制. 以前说过,安卓的本质是运行在Linux上的虚机系统.在Linux中,对系统进行 ...
- Git 系列(五):三个 Git 图形化工具
在本文里,我们来了解几个能帮你在日常工作中舒服地用上 Git 的工具. 我是在这许多漂亮界面出来之前学习的 Git,而且我的日常工作经常是基于字符界面的,所以 Git 本身自带的大部分功能已经足够我用 ...
随机推荐
- P3306-[SDOI2013]随机数生成器【BSGS】
正题 题目链接:https://www.luogu.com.cn/problem/P3306 题目大意 给出一个\(p,a,b,x_1,t\),有\(x_i=ax_{i-1}+b\) 求一个最小的\( ...
- 做毕设的tricks
CNKI上无法下载博硕士学位论文的PDF版本,只有CAJ版本,挺恶心的.直接下载安装Chrome extension就可以解决了. 链接:https://share.weiyun.com/5HGFF2 ...
- Redis多种数据类型以及使用场景
SDS简单动态字符串 struct sdshdr { // 记录buf数组中已使用字节的数量 // 等于SDS所保存字符串的长度 int len; // 记录buf数组中未使用字节的数量 int fr ...
- 超简洁,玩转springboot 之springboot自定义start工程
springboot 的start 建一个父工程 不需要其他目录结构,需要注意的是把type的类型改为POM 这样就没有工程的目录结构 因为父工程不需要 给父工程的pom添加依赖 <depend ...
- 微信小程序Canvas添加水印字体,通过setGlobalAlpha设置字体透明度。
微信小程序自带的设置透明度只有setGlobalAlpha,但是CanvasContext.setGlobalAlpha设置透明度,是全局透明,整张图片都透明了.所以直接使用是不行的. 换种思路实现: ...
- NOIP模拟76
前言 还有不到 10 天就要 CSP-S ...马上我就要有我的第一篇游记了. 今天考试莽了一回,整了大概 2.5h 的 T1 ,可能是因为今天题目比较难,看起来成效不错. 以后还是要注意时间的分配( ...
- 题解 「BZOJ2137」submultiple
题目传送门 题目大意 给出 \(M,k\) ,求出 \[\sum_{x|M}\sigma(x)^k \] 给出 \(P_i\),满足 \(n=\prod_{i=1}^{n}a_i^{P_i}\),其中 ...
- Longhorn 云原生容器分布式存储 - 故障排除指南
内容来源于官方 Longhorn 1.1.2 英文技术手册. 系列 Longhorn 是什么? Longhorn 云原生容器分布式存储 - 设计架构和概念 Longhorn 云原生容器分布式存储 - ...
- Java(45)JDK新特性之String流
作者:季沐测试笔记 原文地址:https://www.cnblogs.com/testero/p/15201671.html 博客主页:https://www.cnblogs.com/testero ...
- go-zero 实战之 blog 系统
go-zero 实战项目:blog 本文以 blog 的网站后台为例,着重介绍一下如何使用 go-zero 开发 blog 的用户模块. 本文涉及的所有资料都已上传 github 仓库 kougazh ...