我藏匿了一块东西
% 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
,所以我已经保护了藏书的内容。现在,如何从树中删除该refs/stash
,以使其不会继续抱怨?
编辑
即使按照@ mark-adelsberger的建议删除refs/stash
参考,提交也会显示在历史记录列表中:
% 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(自制软件)。
答案 0 :(得分:1)
更新-根据已编辑的问题在末尾添加了注释
如果.git/refs/stash
为空(或不存在),但git log显示refs/stash
,则我怀疑stash
引用已以某种方式添加到您的packed-refs
文件中
您可以通过以下方式确认ref的存在(无论其在磁盘上的表示如何)
git for-each-ref refs/stash
并且如果显示refs/stash
(如我所愿),则可以使用以下方式删除引用
git update-ref -d refs/stash
提醒一下,这是一个潜在的破坏性命令;在特定情况下,如果您知道您已经保存了对该数据的引用,或者不再想要它,那就很好了。
因此,我不清楚是什么原因导致日志报告似乎无法到达的提交(基于图形以及该特定提交上缺少refname的原因)。如果我在那种状态下有一个仓库,我想我可以弄清楚发生了什么,但是我真的不知道如何重现症状。
我最好的建议是做
git for-each-ref |grep 3fb311d
查看是否出于某种原因在日志中未引用引用。如果什么也没显示,另一个想法就是
git for-each-ref
或者看看是否
git fsck
告诉您任何有用的信息。如果有任何更多信息,我将很乐意查看并提供更多建议。