首页 > 其他分享 >git Stash详细介绍:git stash和git pop的详细用法

git Stash详细介绍:git stash和git pop的详细用法

时间:2022-12-06 21:23:34浏览次数:34  
标签:git list stash 暂存区 pop 详细 分支

git Stash详细介绍:git stash和git pop的详细用法



一、背景

我们经常会遇到这样的情况:

在开发过程中,在一个分支开发新的功能,还没开发完毕,做到一半时有反馈需要处理紧急bug,但是新功能开发了一半又不想提交。

分支有改变时不提交又不能切换分支,如下:

这时就可以使用 git stash ,stash 就是为此而生的!

二、使用

2.1 使用之前,先简单了解下 git stash 干了什么:

它会保存当前工作进度,会把暂存区和工作区的改动保存到一个未完结变更的堆栈中;执行完这个命令后,在运行 git status 命令,就会发现当前是一个干净的工作区,没有任何改动。

  1. git stash 是本地的,不会上传到服务器上;
  2. 可以通过使用git stash save 'message...'可以添加一些注释。

2.2 git stash 相关命令

命令名作用
git stash隐藏当前的工作现场, 此时, git status的结果是 clean
git stash list查看所有隐藏, 每一行的冒号前面的字符串就是标识此隐藏的id
git stash apply重新显示标识为 id 的隐藏
git stash dropgit apply恢复隐藏后, 需要手动删除 list 列表中的记录
git stash pop恢复最新的进度到工作区
git stash pop stash@[stash_id]恢复指定的进度到工作区

2.3 使用流程

一般先使用 git stash list 查看有没有已经 stash 的记录,避免和自己的混淆,到时候使用时不知道是哪条记录

查看有无用的 list,可以先使用 git stash drop n 删除,直到 list 为空

  1. 执行 git stash

默认是不带注释的,想要后面看的更清楚该 stash 是存储的什么,可以如下操作:

执行  git stash save "commend"

  1. 查看刚才保存的工作进度 git stash list

保存注释的长这样:

可以看到 stash@{0} 是刚才保存的

  1. 这时候在看分支已经是干净无修改的(改动都有暂存到 stash)

  1. 现在就可以正常切换到目标分支,进行相应操作

  1. 其他分支处理完成,再切回来使用刚才的 stash, 还是先查看 暂缓列表

  1. 选择使用暂缓 git stash apply **n**

这时就看到刚才保存的工作进度,已经原样恢复~大功告成!

继续开发。。。


先来思考一下,为什么会使用 stash 命令?

在项目开发中,基本都会遇到这样的情况:本来你在自己的分支上愉快的开发功能A,但是突然加了一个优先级很高的需求B或者有bug需要先修复掉。但这个时候,你新做的功能A刚开发到一半,总不能先提交A再开发B,或者直接拉个新分支切过去吧?(可以倒是可以,但是不推荐)

git stash在暂存区:存取、删除

截图部分(方便查看)

内容部分(方便复制命令)

暂存区:存取、删除
命令说明
git add.、git stash提交到暂存区
git stash暂存工作区修改的内容:保存到暂存区(可以提N次)
git stash pop恢复暂存的工作区内容:从暂存区取出(最近一次)
git stash list查询工作区所有stash的列表
git stash apply stash@{2}查询后,恢复第二次提交的
git stash clear清空暂存区的所有stash

标签:git,list,stash,暂存区,pop,详细,分支
From: https://www.cnblogs.com/lifan-fineDay/p/16960584.html

相关文章

  • Vulnhub之Rickdiculously靶机详细测试过程
    Rickdiculously识别目标主机IP地址─(kali㉿kali)-[~/Vulnhub/Rickdiculously]└─$sudonetdiscover-ieth1Currentlyscanning:192.168.60.0/16|ScreenVie......
  • Git不显示图标
    git操作的文件夹,发现没有显示出来是否上传的绿色图标,这样导致不清楚哪些文件是否修改,是否上传。以下方法让我的问题解决了,但我并不知道是不是所有人的问题都适用这种方法,......
  • 1796.second-largest-digit-in-a-string 字符串中第二大的数字
    问题描述1796.字符串中第二大的数字解题思路遍历就好了代码classSolution{public:intsecondHighest(strings){intfirst=-1;intseco......
  • pop_heap 源码剖析
    一:用法示例一共两个重载:default(1)   template<classRandomAccessIterator> voidpop_heap(RandomAccessIteratorfirst, RandomAccessIteratorlast);cu......
  • Hexo&github action持续部署
    目的为了免除日常新建hexonew,hexos,hexog,hexod等繁琐的书写部署流程指令,同时为了更加注重于博客内容本身而不是到新机器重新配置Hexo走一遍部署流程持续集成&持......
  • 《UnityShader入门精要》 漫反射部分代码及详细注释
    漫反射漫反射计算公式:Cdiffuse=(Clight·Mdiffuse)max(0,n·l)Clight:入射光线的强度和颜色Mdiffuse:材质的漫反射系数物体本色n:法线单位向量l:......
  • git下载代码失败可以修改host来解决
    第一步点击下面网址:WhatIsMyIPAddress?FreeIPLookup搜索github.com和github.global.ssl.fastly.net如图  复制红框IP地址。在C:\WINDOWS\system32\drivers......
  • IDEA 中 git Merge Select into Current 和 Pull into Current using merge有什么区别
     今天同事更代码,问我个问题蒙住了,问这俩有啥区别?平时没注意,突然有点答不上来,感觉确实翻译过来是一样的,没区别。  先说结论,MergeSelectintoCurrent  是将本地......
  • gitLab的使用
    1.GitLab的使用之创建分支 (创建dev分支)2.1 Tortoisegit拉取分支的两种方式 (使用第一种)2.2  GitLab合并分支(dev分支合并到master上)......
  • Git修改commit信息
    一、git如何修改最近一次的commit信息1.gitcommit--amend2.进入vim操作界面之后,点击字母键i然后进入INSERT模式,然后对commit信息进行修改,然后ESC......