我完成了我的项目,并希望使用GitHub Desktop提交它。
当我提交我的第一次提交时,我明白我不想让一个文件夹进入该提交,所以我点击了Revert按钮。然后我发现我的项目库空了!我试图返回我的文件,点击"撤消最近的提交"按钮。
所以现在我既没有文件也没有提交(我没有发布任何内容)。
Git log和git reflog表明我没有任何提交。
如何恢复我的项目?
由于我刚刚开始使用Git,我很抱歉找不到解释。
答案 0 :(得分:3)
运行git reflogs
:它会显示您上次提交的sha1。然后你只需要检查你感兴趣的提交,并在其上放一个分支。
例如,假设此命令的第一行是:
c5e511a HEAD@{0}: checkout: moving from e9c02de51d808c91ac2abbac39166b1daf150452 to origin/master
e9c02de HEAD@{1}: checkout: moving from c5e511a7b64da6f52c514f770959e48c3b503169 to e9c02
c5e511a HEAD@{2}: commit: final commit of my project
并且说你认识到最后一行代表你感兴趣的提交。然后你可以运行:
git checkout c5e511a
git checkout -B master
和il:你的master
分支是否属于右边。
请注意,您还可以找到有用的命令
git show <sha1>
因为它会提供有关特定提交的更多信息
另一方面,如果删除尚未提交的更改,则会丢失。 在这种情况下,请确保我知道你的痛苦是什么感觉......好消息是你永远不会再犯这个错误了!
答案 1 :(得分:0)
你还原了所有东西,因为没有任何东西被提交之前所有的东西都是错误的猜测
答案 2 :(得分:0)
我认为你已经失去了所有的工作:-(并且你将学习git的第一个也是最重要的规则:
“首先,只要你能保存你的工作,然后做任何你想做的事情(修改,改造,合并,重置......),你就可以随时撤消并重试你想要做的事情!”< / p>
第二条规则是花5分钟来理解reflog
命令,以便能够找到一些“丢失”的提交,以便轻松撤消在第一条规则之后完成的某些操作。
几乎所有你需要的东西永远不会失去一些与git ...
的工作答案 3 :(得分:0)
我真的不喜欢这些答案说:“我不知道如何修复它,所以你显然已经失去了一切,将来会更加小心”
仅仅因为你不知道该怎么做并不意味着你应该说这是不可能的!它实际上是无益的,因为如果事情是可能的,你只是不知道那么你正在散布谎言:P。
无论如何,这样的情况可能是惯用的,所以可能没有一个命令能够始终如一地工作。但你可以尝试以下一些方法:
在您执行任何操作之前使用cp -r
现在,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's dag的叶子,其中一片叶子将成为你的老枝。
命令git rev-list --objects --all
显示空闲中的每个对象,git cat-file
可以检查这些对象。
git rev-list --objects --all --graph
会尝试绘制与您的提交一样模糊的图形。我不太确定输出是什么,但第一个结果是我的主人。