是否可以在 运行 git 过滤器分支之后检索存储?
Is it possible to retrieve a stash after running git filter-branch?
I 运行 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
,检查每个 unreachable/dangling blob 并提交和 运行 git stash list
有没有办法找回那个藏品?
您现有的藏品并不完全丢失。嗯,很难找到,所以从这个意义上说,它是 "lost"。发生的事情是 git filter-branch
损坏了 它。 git stash
所做的是进行两次(有时是三次)提交,其中关键的一次看起来像合并提交。大多数 Git 命令将其 视为 合并。其中包括 git filter-branch
。这可能会损坏存储组,因为 git stash
本身需要这些奇怪的提交块——它们看起来像合并,但不能被视为合并。
由于 Git 中没有任何内容实际上可以 更改 任何现有的提交,但是,filter-b运行ch 所做的是将存储复制到新的和"improved"(但实际上,已损坏)提交。 stash
这个名字现在指的是这些新的和未改进的(deproved?depraved?)提交。
如果你还没有破坏所有 refs/original
space:
git update-ref refs/stash refs/original/refs/stash
会将 refs/stash
恢复到 filter-b运行ch 操作之前的状态。 (这假设单次通过 filter-branch
;每次额外的通过都需要 -f
或删除之前的 refs/original/
space,其中任何一个都会破坏您想要返回此处的值.)
如果您使用的是存储 "stack",那是在 refs/stash
本身的 reflog 中。除了最后一个条目 stash@{1}
应该保持 filter-b运行ch 操作之前的旧值 refs/stash
之外,它应该没有损坏。这提供了另一种恢复方法,如果您 已经 破坏了 refs/original
名称。如果您 运行 多次通过 git filter-branch
,您可能需要比此处 1
更高的数字。
如果所有其他方法都失败了,the git stash
documentation 中描述的 git fsck
方法接近尾声 错误地 cleared/dropped 恢复存储条目 ,可用,但很痛苦。
(顺便说一句——这在 这个 点没有帮助——这是我建议 避免 git stash
的众多原因之一大多数时候。因为它所做的只是进行提交,所以只需进行正常提交。Git 的其余部分将很好地处理这些正常提交。)
I 运行 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
,检查每个 unreachable/dangling blob 并提交和 运行git stash list
有没有办法找回那个藏品?
您现有的藏品并不完全丢失。嗯,很难找到,所以从这个意义上说,它是 "lost"。发生的事情是 git filter-branch
损坏了 它。 git stash
所做的是进行两次(有时是三次)提交,其中关键的一次看起来像合并提交。大多数 Git 命令将其 视为 合并。其中包括 git filter-branch
。这可能会损坏存储组,因为 git stash
本身需要这些奇怪的提交块——它们看起来像合并,但不能被视为合并。
由于 Git 中没有任何内容实际上可以 更改 任何现有的提交,但是,filter-b运行ch 所做的是将存储复制到新的和"improved"(但实际上,已损坏)提交。 stash
这个名字现在指的是这些新的和未改进的(deproved?depraved?)提交。
如果你还没有破坏所有 refs/original
space:
git update-ref refs/stash refs/original/refs/stash
会将 refs/stash
恢复到 filter-b运行ch 操作之前的状态。 (这假设单次通过 filter-branch
;每次额外的通过都需要 -f
或删除之前的 refs/original/
space,其中任何一个都会破坏您想要返回此处的值.)
如果您使用的是存储 "stack",那是在 refs/stash
本身的 reflog 中。除了最后一个条目 stash@{1}
应该保持 filter-b运行ch 操作之前的旧值 refs/stash
之外,它应该没有损坏。这提供了另一种恢复方法,如果您 已经 破坏了 refs/original
名称。如果您 运行 多次通过 git filter-branch
,您可能需要比此处 1
更高的数字。
如果所有其他方法都失败了,the git stash
documentation 中描述的 git fsck
方法接近尾声 错误地 cleared/dropped 恢复存储条目 ,可用,但很痛苦。
(顺便说一句——这在 这个 点没有帮助——这是我建议 避免 git stash
的众多原因之一大多数时候。因为它所做的只是进行提交,所以只需进行正常提交。Git 的其余部分将很好地处理这些正常提交。)