找到丢失的`git write-tree`
find lost `git write-tree`
我有一个脚本使用 git write-tree
来弥补 git stash
的不足,除非我 ctrl C脚本.
[... other parts of script ...]
exec('git add -f .');
workingTreeHash=exec('git write-tree');
exec('git checkout -f [...]');
此时我^C脚本因此丢失了write-tree hash变量workingTreeHash
.
我的恢复尝试:
$ git fsck --lost-found --full --unreachable
$ git config gc.auto 0
$ (
for i in $(ls .git/lost-found/{commit,other}/*);do
git show $(basename $i);
done;
)
|grep -iae 'unique modifications';
什么也没显示...所以丢失的 git add -f .;git write-tree
对象去哪儿了?在哪里可以找到。 (我知道 git 工作区,我会尝试将其作为脚本的替代方案)。
这不是高优先级,仅供将来参考,以防重要的事情再次发生。
find .git/objects/?? -type f -exec ls -t {} + | head
(可能是第一个),然后git show
他们。
对我来说,自从上次提交后我做了一些更改,所以我得到
$ find .git/objects/?? -type f -exec ls -t {} + | head
.git/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391
.git/objects/e1/c72a7c34b57c7570dd13c269d3065ef27fb896
.git/objects/1a/e2d4203a023095ce1cfc63e9b201f402234b60
.git/objects/fc/13259859a21139736e58d3a80f15c495ee90fe
.git/objects/01/ca0f1889baacba762a2841c9bce3c3f3927a90
.git/objects/6a/c151c9adf00d90e55afd8da4a0534deeb27d00
.git/objects/91/82087c12c32c2dc475798913b949a5a063d1e0
.git/objects/ca/291ca41a16b5dcda64c063f2844337bbb16b1f
.git/objects/35/6b4df63d859611895c730633790dd1bcdb7eb4
.git/objects/b1/615cd532dea5e28cf57be5521cb216dcf90115
find: ‘ls’ terminated by signal 13
$ git show 1ae2d
tree 1ae2d
[…etc]
如果您不想输入,完整的哈希值将是 git rev-parse 1ae2d
。 c72a7
是提交,e69d
,你甚至可能会认出那个哈希,它是我错误添加的空文件。
此外,如果您知道自从编写索引后就没有碰过它,git write-tree
是幂等的,只需再做一次,您将得到相同的树。
我有一个脚本使用 git write-tree
来弥补 git stash
的不足,除非我 ctrl C脚本.
[... other parts of script ...]
exec('git add -f .');
workingTreeHash=exec('git write-tree');
exec('git checkout -f [...]');
此时我^C脚本因此丢失了write-tree hash变量workingTreeHash
.
我的恢复尝试:
$ git fsck --lost-found --full --unreachable
$ git config gc.auto 0
$ (
for i in $(ls .git/lost-found/{commit,other}/*);do
git show $(basename $i);
done;
)
|grep -iae 'unique modifications';
什么也没显示...所以丢失的 git add -f .;git write-tree
对象去哪儿了?在哪里可以找到。 (我知道 git 工作区,我会尝试将其作为脚本的替代方案)。
这不是高优先级,仅供将来参考,以防重要的事情再次发生。
find .git/objects/?? -type f -exec ls -t {} + | head
(可能是第一个),然后git show
他们。
对我来说,自从上次提交后我做了一些更改,所以我得到
$ find .git/objects/?? -type f -exec ls -t {} + | head
.git/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391
.git/objects/e1/c72a7c34b57c7570dd13c269d3065ef27fb896
.git/objects/1a/e2d4203a023095ce1cfc63e9b201f402234b60
.git/objects/fc/13259859a21139736e58d3a80f15c495ee90fe
.git/objects/01/ca0f1889baacba762a2841c9bce3c3f3927a90
.git/objects/6a/c151c9adf00d90e55afd8da4a0534deeb27d00
.git/objects/91/82087c12c32c2dc475798913b949a5a063d1e0
.git/objects/ca/291ca41a16b5dcda64c063f2844337bbb16b1f
.git/objects/35/6b4df63d859611895c730633790dd1bcdb7eb4
.git/objects/b1/615cd532dea5e28cf57be5521cb216dcf90115
find: ‘ls’ terminated by signal 13
$ git show 1ae2d
tree 1ae2d
[…etc]
如果您不想输入,完整的哈希值将是 git rev-parse 1ae2d
。 c72a7
是提交,e69d
,你甚至可能会认出那个哈希,它是我错误添加的空文件。
此外,如果您知道自从编写索引后就没有碰过它,git write-tree
是幂等的,只需再做一次,您将得到相同的树。