我运行git filter-branch --env-filter 'GIT_COMMITTER_DATE=$GIT_AUTHOR_DATE'
以在重新确定基准后确定提交日期。但是,我不知道我的藏匿处会丢失。
我尝试了以下操作:
git reflog --all
,检查它显示的最早提交(c9e4e26 HEAD@{37}: rebase (start): checkout e3536c9^
)并运行git stash list
git fsck
,检出每个不可达/悬垂的blob,然后提交并运行git stash list
有没有办法检索该藏匿处?
您现有的存储藏不完全是丢失。好吧,很难找到,所以从这个意义上讲,它是“丢失”的。发生的是git filter-branch
已对其进行[[damaged。 git stash
的工作是进行两次(有时是三次)提交,其中的一个看起来像合并提交。大多数Git命令将其as合并。包括git filter-branch
。因为git stash
本身需要这些奇怪形式的提交块,所以这可能会损坏存储组-它们看起来像合并,但不能视为合并。
change
任何现有的提交,因此,筛选分支所做的是将存储复制到新的和“改进的”(但实际上是损坏的)提交中。现在,名称stash
指的是这些新的未改进的(未批准的?堕落的?)提交。如果您还没有破坏所有的refs/original
空间:git update-ref refs/stash refs/original/refs/stash
将破坏了refs/stash
恢复到过滤器分支操作之前的状态。 (这假设单次传递filter-branch
;每增加一次传递将需要-f
或删除先前的refs/original/
空间,这两个空间都会破坏您想要在此处返回的值。)如果您使用的是隐藏的“堆栈”,则在
refs/stash
本身的引用日志中。除最后一项stash@{1}
应保持过滤分支操作之前的refs/stash
的旧值外,它应该没有损坏。如果您[[have
refs/original
名称,则提供了另一种恢复方法。如果您多次运行git filter-branch
,则此处所需的数字可能会比1
大。如果所有其他方法均失败,则可以使用[[恢复错误地清除/删除的存储项末尾处的git fsck
中描述的the git stash
documentation方法,但很痛苦。
this
上有帮助-这是我大多数时候推荐avoidinggit stash
的许多原因之一。由于它所做的只是提交,所以只需进行普通提交。Git的其余部分将很好地处理这些常规提交。)