git stash回退
1.起因
这个问题要从今天刚遇到的事儿说起,昨晚代码出了个乌龙事件,本来正在dev分支进行新功能的开发,但是测试出现的问题是在release 分支上,当时就想到使用stash 将正在开发的dev已经修改的代码 暂时存下来,然后切换到master,重新checkout -b 一个新的fix branch进行代码修复测试, 但是当我测试完成,fix bug ,push到远程仓库后,切换到dev分支进行继续开发时,
一顿操作猛如虎,结果错把
git stash pop 0
敲成了
git stash drop 0
当时内心骂出了 what fuck, 心想,这咋办,难不成要重新凭记忆重来一次,可是关键是修改了那么多的地方,代码虽然都是自己写的,但是重新来写,心里是有一万个不愿意啊。于是google了stash 回退, 嘿, 还真有同我一样曾经手一抖毁所有的经历。 于是就把这个问题重新整理一下。
2. 问题出现
使用
git stash list
显示所有stash列表
说明:
stash 0,1,2: 说明暂存了三次的缓存, 0 表示最新的一条
使用git stash show 0 可以显示具体修改某一次的详情, 详情包括某个分支(dev
),本地缓存log md502a2ba5f
错误使用指令
git stash drop
// 默认删除的是最近stash save的一次
该指令意思时 将暂存的最新一条缓存删除掉了, 当再次执行git stash list
的时候,最近一次git stash save
已经没有显示。★正确使用取出某一次的stash记录应该使用:
git stash pop 0
再次查看 stash , 发现stash 列表只有两次缓存项目了。
3.修复
git 并没有删除包含了我的更改的对象,它只是移除了对它的引用。
为了证明这一点,我使用命令 git fsck,它会验证数据库中对象的连接和有效性.
使用了参数
--unreachable
,我让 git-fsck 显示出所有不可访问的对象。正如你看到的,它显示不可访问的对象。而当我从 stash 中删除了我的更改之后,表示这些对象是不可以访问的:
通过 管道符可以过滤出commit的所有丢失的的缓存
过滤出来这么多的不可访问的对象, 但是并不知道哪一个是刚刚被删除的那个。 这个排序并不是按时间顺序显示
使用
git show commit-log
查看详情(需要通过执行命令 git show来搜索每一个对象。)git show d5ba741a6349936c479aa3f900e53faa3372ae7f
就是它!
ID 号
d5ba741a6349936c479aa3f900e53faa3372ae7f
对应了我的更改。现在我已经找到了丢失的更改,我可以恢复它。其中一种方法是将此 ID 取出来放进一个新的分支,或者直接提交它。
恢复,将更改再次恢复应用到dev 分支上。
git stash apply d5ba741a6349936c479aa3f900e53faa3372ae7f
此时分支应该已经恢复到 stash save 之前的状态
4. 注意
需要重点记住的是 git 会周期性地执行它的垃圾回收程序(gc),它执行之后,使用 git fsck 就不能再看到不可访问对象了。
git stash回退的更多相关文章
- git stash 用法
git stash用于将当前工作区的修改暂存起来,就像堆栈一样,可以随时将某一次缓存的修改再重新应用到当前工作区. 一旦用好了这个命令,会极大提高工作效率. 直接举例说明: 1.准备工作,首先初始 ...
- git stash 的一次惊心动魄的误删操作
git stash 的一次惊心动魄的误删操作 简介:行走在互联网最低端的小熊 问题--源起: 小熊和所有混迹在互联网中的开发一样,公司里面用git来管理项目,由于可能经常有几个问题要开发,要频繁在多分 ...
- Git Stash紧急处理问题,需要切分支
在开发过程中,大家都遇到过bug,并且有些bug是需要紧急修复的. 当开发人员遇到这样的问题时,首先想到的是我新切一个分支,把它修复了,再合并到master上. 当时问题来了,你当前正在开发的分支上面 ...
- git stash和git stash pop
git stash 可用来暂存当前正在进行的工作, 比如想pull 最新代码, 又不想加新commit, 或者另外一种情况,为了fix 一个紧急的bug, 先stash, 使返回到自己上一个comm ...
- git stash -u 添加新文件
git 提交 有新文件执行 git stash -u ------ 如果已经执行git stash,会发现有UNtracked这个单词 说明新文件没有添加进去,此时 执行 git stash ...
- 每天一命令 git stash
git stash 命令是用于保存当前进度的命令.该命令会保存当前工作区的改动.保存的改动是已经跟踪的文件的改动,对于未跟踪的改动stash是不会保存的. git stash 命令常用于分支切换的 ...
- git stash提交PR的正确步骤&git squash技术
1.git stash梳理 1.1git stash的克隆与同步 首先整理下git stash的逻辑是这样 在本地做出了新的修改,提交时显示当前的版本不是最新版本,这时就需要先pull一下自己代码仓库 ...
- git merge git pull时候遇到冲突解决办法git stash
在使用git pull代码时,经常会碰到有冲突的情况,提示如下信息: error: Your local changes to 'c/environ.c' would be overwritten b ...
- git stash简介
原文:http://gitbook.liuhui998.com/4_5.html 一.基本操作 当你正在做一项复杂的工作时, 发现了一个和当前工作不相关但是又很讨厌的bug. 你这时想先修复bug再做 ...
随机推荐
- QFNU-ACM 2020.04.05个人赛补题
A.CodeForces-124A (简单数学题) #include<cstdio> #include<algorithm> #include<iostream> ...
- linux如何patch打补丁
1. 创建2个文件 1.txt 和 2.txt 并在1.txt基础上修改成为2.txt book@100ask:~/patch$ ls 1.txt 2.txt book@100ask:~/patch$ ...
- 【秒懂音视频开发】23_H.264编码
本文主要介绍一种非常流行的视频编码:H.264. 计算一下:10秒钟1080p(1920x1080).30fps的YUV420P原始视频,需要占用多大的存储空间? (10 * 30) * (1920 ...
- nohup /usr/local/node/bin/node /www/im/chat.js >> /usr/local/node/output.log 2>&1 &
nohup和&后台运行,进程查看及终止 &后台运行 登出ssh终端,进程会被自动kill掉 但是nohup >>XX.log 2>&1 & 登出终 ...
- $(cd "$(dirname "$0")",pwd) 解析
xx.sh 文件内容如下: #!/bin/bash BIN_FOLDER=$(cd "$(dirname "$0")";pwd) echo $BIN_FOLDE ...
- shell练习(1)创建100个用户
shell练习(1)创建100个用户 默默努力的小白. 2020-04-15 16:28:49 49 收藏文章标签: linuxshell版权随机创建100个用户,并生成随机密码,并将密码放入一个文件 ...
- OSI七层模型与TCP/IP五层模型-(转自钛白Logic)
OSI七层模型与TCP/IP五层模型 博主是搞是个FPGA的,一直没有真正的研究过以太网相关的技术,现在终于能静下心学习一下,希望自己能更深入的掌握这项最基本的通信接口技术.下面就开始 ...
- MyBatis 高级查询之多对多查询(十一)
高级查询之多对多查询 查询条件:根据玩家名,查询游戏信息 我们在之前创建的映射器接口 GameMapper.java 中添加接口方法,如下: /** * 根据玩家名查询游戏 * @param name ...
- MyBatis 开启 Log4j 日志调试信息开关
Log4j 是什么 Log4j 是由 Apache 提供的开源日志框架,用于帮助用户处理日志信息. Log4j 能将日志信息分级打印和存储,而且提供了日志不同的存储方式,我们可以将日志发送到控制台,或 ...
- 3.1 cat:合并文件或查看文件内容
cat 命令 可以理解为英文单词concatenate的缩写,其功能是连接多个文件并且打印到屏幕输出,或者重定向到指定的文件中.此命令常用来显示单个文件内容,或者将几个文件内容连接起来一起显示,还可以 ...