我有一个破损的储藏室:
% git stash drop
fatal: log for refs/stash is empty
% cat .git/logs/refs/stash
%
它确实出现在git log --all
中,不过:
% lal
* f32cdce - (HEAD -> develop, origin/develop) (44 minutes ago) <Williams, Ken>
|\
| * 05cc7d3 - (3 weeks ago) <Ken Williams>
| * 6d9c8ae - (3 weeks ago) <Ken Williams>
| | * 3fb311d - (refs/stash) (3 weeks ago) <Ken Williams>
| |/|
| | * 19be16e - (3 weeks ago) <Ken Williams>
| |/
| * ffea5e2 - (i2) (9 weeks ago) <Ken Williams>
( lal
是我的 git log --graph --pretty=format:'%h -%C(yellow)%d%Creset %Cgreen(%ad) %C(bold blue)<%an>%Creset' --all
的别名。)
我做了一个git stash apply 3fb311d
,所以我已经保护了 stash 的内容。现在,如何删除 refs/stash
从树上摘下,这样它就不会一直提示?
编辑
即使删除了 refs/stash
按照 @mark-adelsberger 建议的引用,提交显示在历史列表中:
% lal
* f32cdce - (HEAD -> develop, origin/develop) (31 hours ago) <Williams, Ken>
|\
| * 05cc7d3 - (3 weeks ago) <Ken Williams>
| * 6d9c8ae - (3 weeks ago) <Ken Williams>
| | * 3fb311d - (3 weeks ago) <Ken Williams>
| |/|
| | * 19be16e - (3 weeks ago) <Ken Williams>
| |/
| * ffea5e2 - (i2) (9 weeks ago) <Ken Williams>
| * 199af47 - (9 weeks ago) <Ken Williams>
...
这是在 OS X 10.15.7 上使用 Git 2.29.0(自制软件)。
最佳答案
更新 - 根据编辑的问题在末尾添加注释
如果 .git/refs/stash
为空(或不存在),但 git log 显示 refs/stash
,那么我会怀疑 stash
ref 以某种方式添加到您的 packed-refs
文件中。
您可以通过以下方式确认引用的存在(无论其在磁盘上的表示形式如何)
git for-each-ref refs/stash
如果显示refs/stash
(我认为会),那么您可以使用
git update-ref -d refs/stash
提醒一下,这是一个潜在的破坏性命令;在特定情况下,您知道您已经保存了对该数据的引用,或者不再需要它,那么就可以了。
因此,我不清楚什么会导致日志报告似乎无法访问的提交(基于图表以及该特定提交上缺少引用名称)。如果我有一个处于该状态的存储库,我想我可以弄清楚发生了什么,但我真的不知道如何重现该症状。
我最好的建议是这样做
git for-each-ref |grep 3fb311d
查看是否由于某种原因引用没有在日志中命名。如果这没有显示任何内容,那么另一个想法就是
git for-each-ref
或者看看是否
git fsck
告诉你任何有用的事情。如果其中任何一个能提供更多信息,我将很乐意查看并提供更多建议。
关于Git:删除损坏的存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64756516/