运行git筛选器分支后是否可以检索存储?
我运行了运行git筛选器分支后是否可以检索存储?,git,git-stash,git-filter-branch,Git,Git Stash,Git Filter Branch,我运行了git-filter分支--env-filter'git\u COMMITTER\u DATE=$git\u AUTHOR\u DATE'来修复我重新设置基础后的提交日期。然而,我不知道我的藏品会丢失 我尝试了以下方法: 运行git reflog--all,检查它显示的最早提交(c9e4e26 HEAD@{37}:rebase(start):checkout e3536c9^)并运行git stash list 运行git fsck,检查每个无法访问/挂起的blob并提交并运行git隐
git-filter分支--env-filter'git\u COMMITTER\u DATE=$git\u AUTHOR\u DATE'
来修复我重新设置基础后的提交日期。然而,我不知道我的藏品会丢失
我尝试了以下方法:
- 运行
,检查它显示的最早提交(git reflog--all
)并运行c9e4e26 HEAD@{37}:rebase(start):checkout e3536c9^
git stash list
- 运行
,检查每个无法访问/挂起的blob并提交并运行git fsck
git隐藏列表
是否有办法取回该藏品?您现有的藏品并没有完全丢失。嗯,很难找到,所以从这个意义上说,它是“丢失的”。发生的情况是,
git过滤器分支
损坏了它。git stash所做的是提交两次,有时是三次,其中关键的一次看起来像是合并提交。大多数Git命令将其视为合并。这包括git过滤器分支
。这可能会损坏隐藏组,因为git stash
本身需要这些奇怪的提交块,它们看起来像合并,但不能被视为合并
由于Git中的任何内容实际上都不能更改任何现有的提交,所以filter branch所做的就是将隐藏内容复制到新的“改进”(但实际上是损坏的)提交中。名称stash
现在指的是这些新的和未改进的(deprovered?deprovered?)提交
如果您没有删除所有refs/original
空格:
git update-ref refs/stash refs/original/refs/stash
将refs/stash
恢复到筛选器分支操作之前的状态。(这假设一次通过过滤器分支
;每次额外通过都需要-f
或删除前面的参考/original/
空格,这两个空格中的任何一个都会破坏您想要返回此处的值。)
如果您使用的是stash“stack”,它位于reflog中,用于refs/stash
本身。它应该没有损坏,除了最后一个条目,stash@{1}
,应该保存过滤器分支操作之前的refs/stash
旧值。如果您已经删除了refs/original
名称,那么这将提供另一种恢复方法。如果您运行了多个git过滤器分支
,您可能需要比此处的1
更高的数字
如果所有其他操作都失败,则可以使用中描述的git fsck
方法,该方法位于恢复错误地清除/丢弃的隐藏项下的末尾,但非常痛苦
(顺便说一句,这在这一点上并没有帮助。这是我建议大多数时候避免git隐藏的原因之一。因为它所做的只是进行提交,只需进行正常提交。git的其余部分将很好地处理这些正常提交。)