gpt4 book ai didi

git - 恢复 git merge --abort 后删除的 git 文件

转载 作者:太空狗 更新时间:2023-10-29 13:33:21 33 4
gpt4 key购买 nike

我丢失了在“merge 冲突”阶段添加到 git 的文件。

一步一步:

git pull
git status

Git 通知我“merge 冲突”,没关系。然后我创建一个新文件并将其添加到 git。

vi test.txt
git add test.txt

之后,中止 merge :

git merge --abort

我既没有在目录中找到文件“test.txt”,也没有通过“git fsck”或“git reflog”找到文件。是否可以恢复文件?

最佳答案

你用 git fsck 试过什么? ?

请参阅此 SO 问题:Recover files that were added to the index but then removed by a git reset


一般答案是:您键入的指令序列已将文件从跟踪(和磁盘)中删除,无法保证您的文件内容可以被检索。

然而,git有很多安全机制,其中之一是:如果在 repo 协议(protocol)的某个地方输入了一些数据,它不会在两周内被删除。

(git 有垃圾回收机制,参见git help gc)


如果你确实运行了 git add test.txt在某些时候,这个 Action 是最近发生的,应该仍然存在一些存储在 git 中的文件内容的痕迹:

git fsck --full --unreachable --no-reflog

git用话来说,一个文件是一个 blob :

git fsck --full --unreachable --no-reflog | grep blob

这应该给你一个内部 git 散列的列表:

unreachable blob 08bf360988858a012dab3af4e0b0ea5f370a2ae8
unreachable blob 21bf7ea93f9f9cc2b3ecbed0e5ed4fa45c75eb89
unreachable blob 08c12ef37075732cf4645269ab5687ba6ba68943
...

请注意 git add file.txt存储文件的内容,而不是文件的名称 ...

如果您记得文件中的特定字符串,可以尝试使用 git grep <string> <hash> 缩小您的研究范围:

$ git fsck --full --unreachable --no-reflog | grep blob | awk '{ print $3 }' > list.txt
$ cat list.txt | while read blob; do
if git grep -q "string" $blob; then
echo $blob
fi
done

然后您可以使用以下命令查看 blob 的全部内容:

git show $blob

并希望能找回您正在寻找的文件。

关于git - 恢复 git merge --abort 后删除的 git 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39468125/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com