当前位置: 首页 > news >正文

git stash 用法总结

目录

  • 1,介绍
    • 场景1:
    • 场景2:
  • 2,常用命令
    • 2.1,基础
    • 2.2,进阶
      • 1,存储时指定备注
      • 2,通过索引来操作指定的存储
      • 3,修改存储规则
    • 2.3,查看 stash 修改的具体内容

1,介绍

场景1:

如果正在A分支做开发,但 B 分支的代码测出bug需要修改,所以需要从A分支切换到B分支。

此时可这样处理:在A分支 add + commit 之后,再切换到 B 分支。但这样做有2个问题:

  1. 增加了不必要的 commit,虽然之后可以通过 git commit --amend 来修改,
  2. A 分支的功能写了一半,此时 commit,到时再切换回 A 分支时还得查看 commit 才能知道之前修改的内容,比较麻烦。

场景2:

在 A 分支开发到一半发现使用错分支了,应该在 B 分支开发,需要将当前已修改的内容得全部平移到B分支,同时不影响当前分支和版本库。


上面的情况,最好用的办法就是 stashes 存储栈,它的所有操作不会影响到版本库。

2,常用命令

stashes 存储栈,遵循后进先出

2.1,基础

# 查看帮助(所有命令列表)
git stash -h
# 将当前工作区和暂存区的代码存储到 stashes栈中。
git stash
# 取出最近的一条 stash,并在 stashes 栈中删除。
git stash pop
# 取出最近的一条 stash,stashes 栈中不删除。
git stash apply# 不取出,直接在 stashes 栈中删除最近的一条 stash
git stash drop

所以,git stash pop = git stash apply + git stash drop

# 查看 stashes 列表
git stash list
# 清空 stashes 栈
git stash clear

所以,

场景1,可以直接在 A 分支执行 git stash,在 B 分支开发完之后再切换到 A 分支,执行 git stash pop 即可。

场景2,可以直接在 A 分支执行 git stash,切换到 B 分支后执行 git stash pop 即可。

2.2,进阶

1,存储时指定备注

git stash save 测试stash
# or
git stash push -m 测试stash

缺图查看效果

2,通过索引来操作指定的存储

# 操作 stash@{1}
git stash pop 1
# or 这里一定要加引号,否则报错。
git stash pop "stash@{1}"

git stash applygit stash drop 同理。

3,修改存储规则

默认存储规则:不包括工作区新增文件(未被跟踪的文件)和 .gitignore 忽略的文件,包括工作区和暂存区的修改。

  1. -u--include-untracked 表示包括未被跟踪的文件。
git stash save 备注 -u
  1. -a--all 表示包括 .gitignore 忽略的文件。
git stash save 备注 -a
  1. -k--keep-index 表示不包括暂存区的修改。
git stash save 备注 -k

2.3,查看 stash 修改的具体内容

查看命令 git stash show 并没有介绍,是因为 vscode 自带的版本管理非常好用,可以详细的查看每个 stash 做了哪些修改。

可以看到不止是 stashes,每条 commit 也能随时查看。

在这里插入图片描述


以上。

相关文章:

  • 【GUI】-- 10 贪吃蛇小游戏之静态面板绘制
  • SpringCloud微服务注册中心:Nacos介绍,微服务注册,Ribbon通信,Ribbon负载均衡,Nacos配置管理详细介绍
  • 数据结构 线性表
  • CURL踩坑记录
  • MongoDB相关基础操作(库、集合、文档)
  • c语言:回文字符串
  • LeetCode40. Combination Sum II
  • FlinkCDC实现主数据与各业务系统数据的一致性(瀚高、TIDB)
  • Axure插件浏览器一键安装:轻松享受高效工作!
  • 【广州华锐互动】VR虚拟现实技术助力太空探险:穿越时空,探索宇宙奥秘
  • 源启容器平台KubeGien 打造云原生转型的破浪之舰
  • skywalking中gateway的拓扑图没有出现
  • quickapp_快应用_requestHeader
  • git进阶使用《多账号管理》
  • HarmonyOS ArkTS开发语言介绍(三)
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • CEF与代理
  • Javascripit类型转换比较那点事儿,双等号(==)
  • JS字符串转数字方法总结
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • underscore源码剖析之整体架构
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 驱动程序原理
  • 如何编写一个可升级的智能合约
  • 手机端车牌号码键盘的vue组件
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • hi-nginx-1.3.4编译安装
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • $.ajax,axios,fetch三种ajax请求的区别
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (四)Linux Shell编程——输入输出重定向
  • (转)创业的注意事项
  • (轉)JSON.stringify 语法实例讲解
  • .[hudsonL@cock.li].mkp勒索病毒数据怎么处理|数据解密恢复
  • .cfg\.dat\.mak(持续补充)
  • .NET CORE使用Redis分布式锁续命(续期)问题
  • .NET Standard 的管理策略
  • .net 中viewstate的原理和使用
  • .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器
  • [ 云计算 | Azure 实践 ] 在 Azure 门户中创建 VM 虚拟机并进行验证
  • [1181]linux两台服务器之间传输文件和文件夹
  • [BZOJ5250][九省联考2018]秘密袭击(DP)
  • [C#]OpenCvSharp使用帧差法或者三帧差法检测移动物体
  • [codeforces] 25E Test || hash
  • [CSS]文字旁边的竖线以及布局知识
  • [java]删除数组中的某一个元素
  • [LeetCode] Ransom Note 赎金条