Git:删除残破的藏匿处

时间:2020-11-09 17:37:58

标签: git git-stash

我藏匿了一块东西

% 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(自制软件)。

1 个答案:

答案 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

告诉您任何有用的信息。如果有任何更多信息,我将很乐意查看并提供更多建议。