美文网首页
恢复被删除的 Git stash 记录

恢复被删除的 Git stash 记录

作者: 涅槃快乐是金 | 来源:发表于2023-12-15 22:31 被阅读0次

一、问题
有时候在 git stash 非常有用,但是我们你能由于一些错误的操作,导致将 git stash 中内容被删除掉,误删 stash.

二、知识点
git fsck 命令用于检查 Git 仓库中的对象的完整性和一致性。它可以发现和报告一些潜在的问题,比如损坏的对象、丢失的对象引用等。

检查对象完整性: 确保所有的对象(提交、文件树、文件等)在物理上存在且没有损坏。如果有对象损坏,git fsck 将报告并显示问题。
寻找不可达对象: Git 使用引用来跟踪对象,如果某个对象没有任何引用指向它(即不可达对象),git fsck 会发现并报告这些不可达的对象。
查找丢失的对象引用: 它会检查是否存在引用(比如分支、标签等),但没有对应的对象存在。这可能是因为删除了对象或引用指向了一个不存在的对象。
输出报告: 将列出发现的问题,并提供相应的修复建议或提示。
三、复制一个副本
为了安全和不熟练操作 git stash 的同学,将当前项目准备一个副本,在副本中进行操作,防止第一个现场丢失。

四、查看 unreachable列表
切换到副本中,所有的操作放在副本进行:

git fsck --unreachable

查看所有 unreachable 的记录, 如同下面的例子:

git fsck --unreachable
Checking object directories: 100% (256/256), done.
unreachable blob 08a0724cff104d83f3c261b68487e5b5dfb0bc92
unreachable blob 09e0e7369d8c60923a53c8097674dde7f71a0cc0
unreachable blob 0b00205b03a9d5a7c311907b968d41da09ee0662
unreachable blob 0ba035459d1ce597a1cbba64a5f1073c467af198
unreachable blob 0f8093bb5835971fad89f8274387d15d38eba9c7
unreachable blob 11205462d9730314c6ac8f0320ef0c6247af4b7a

五、将unreachable 内容提取到编辑器中
最好准备一个编辑器,将所有的内容复制出来,因为这个列表可能很长,在终端展示有限,也不好搜索,将其复制出来放在编辑器中(vscode)在内过多的时候有查找等优势。

六、 认识 unreachable 分类

类型 描述
Commit 不再有分支或标签指向的提交
Tree 不再有提交指向的文件树
Blob 不再有文件树指向的文件对象
Tag 不再有分支或提交指向的标签
unreachable 一般表示 Git 对象的一部分,但由于没有引用指向它们,因此被视为不可达

这里我们重点关注 commit 对象。
七、git show + <sha> 展示信息

git show <sha>

根据返回的信息,判断是不是我们需要恢复的内容,根据个人经验, commit 是我们需要恢复的内容可能比较大

八、恢复
有目标的 sha key, 然后切换到 stash 的分支, 执行:

git stash apply + <sha>

可能会出现如下的错误:

fatal: '<sha>' is not a stash-like commit

解决办法:使用 merge 命令

如果有合并冲突,解决冲突

git merge +<sha>

在副本中已经完成,相同的操作在目标项目中重新实现一次即可。

九、小结
本文主旨在恢复删除的 git stash 存储的内容,从副本出发,结合 git fsck 命令获取 unreachable 列表,然后,根据自己的项目 使用git show <sha>查看 unreachable 对象中的内容,找到目标对象,然后使用 git stash apply <sha>或者 git merge <sha> 进行合并。如果这些操作符合我们的目标,在正式项目中重新演绎一次即可。

相关文章

  • 删除git stash后如何恢复

    恢复误删除的git stash记录 git fsck --unreachable(找删除后的悬空对象)1.首先使用...

  • git stash 删除恢复

    应用场景 stash 手贱删除找回 列出所有stash明细 应用stash

  • 恢复被删除的Git stash记录

    场景: 使用Git stash命令或者SourceTree暂存了工作现场,之后误删了这个stash 恢复方法: 第...

  • Git 恢复删除的Stash

    1.查找到需要恢复的stash 结果: git fsckChecking object directories: ...

  • GIT的使用

    教程地址 查看状态 git status 暂存 git stash 恢复暂存 git stash pop 更...

  • git命令

    git stash clear误清除记录后恢复方法:1.git log --graph --oneline --d...

  • Git: 版本控制(7)

    暂时(保存,恢复,删除)工作进度git stash 在工作目录提交过的文件做下修改 然后git status g...

  • git篇之stash

    git stash ---> 将所有的缓存区和工作区改动、新增、删除放进stash贮藏中git stash –ke...

  • 【Git】恢复被删除的stash

    协作开发由于组员merge我的分支内容到他的分支,又把合并内容push到我的分支。同时我还在自己的本地分支上做了修...

  • git恢复被删除的stash

    背景: 今天不小心把 stash 记录给删除掉。又不想重新敲代码,有点着急~ 解决方法: 只要没把本地仓库给删除,...

网友评论

      本文标题:恢复被删除的 Git stash 记录

      本文链接:https://www.haomeiwen.com/subject/ncvggdtx.html