一、问题
有时分在 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>
进行兼并。如果这些操作符合咱们的方针,在正式项目中从头演绎一次即可。