呻吟
我真的不喜欢这些回答说:“我不知道如何解决它,所以你显然已经失去了一切,以后要多加小心”
仅仅因为您不知道如何做某事并不意味着您应该说这是不可能的!这实际上有点无益,因为如果事情是可能的,而您只是不知道,那么您就是在散布谎言:P。
可能的方法
无论如何,像这样的情况很可能是惯用的,所以可能没有一个命令可以始终如一地工作。但您可以尝试以下方法:
备份
在你做任何事情之前使用cp -r创建repo目录的备份
git 工作原理概述
现在,git 在垃圾收集之前不应该放弃任何提交:我认为必须手动完成。这意味着,希望您的提交存在。只是你没有引用旧的master。
您可能需要查看https://git-scm.com/book/en/v2/Git-Internals-Git-Objects 以了解 git 对象模型。 “tl;dr”是 git 存储库是一棵带有指针的大树。这些指针是 sha 引用。
你可能很幸运
git reflog 文件通过查看.git/logs 起作用,在我的情况下,我设法删除了文件.git/logs/refs/heads/master 文件。但是文件.git/logs/head 仍然存在,所以我可以找到对我之前分支的引用。
允许我运行git reset --hard COMMIT_FOUND_IN_FILE
管道命令git show-ref 也引用了我旧分支的sha。
或者你可能需要努力工作
即使在没有这些线索的情况下,技术上也可以找到 git dag 的叶子,这些叶子中的一片将成为你的旧分支。
命令git rev-list --objects --all 显示你空闲的每个对象,git cat-file 可以检查这些对象。
git rev-list --objects --all --graph 将尝试绘制一些模糊的图形,例如您的提交。我不太确定输出是什么,但第一个结果是我的主人。