如何在GitHub中返回撤消的提交

时间:2016-05-29 20:31:23

标签: git undo github-for-windows

我完成了我的项目,并希望使用GitHub Desktop提交它。

当我提交我的第一次提交时,我明白我不想让一个文件夹进入该提交,所以我点击了Revert按钮。然后我发现我的项目库空了!我试图返回我的文件,点击"撤消最近的提交"按钮。

所以现在我既没有文件也没有提交(我没有发布任何内容)。

Git log和git reflog表明我没有任何提交。

如何恢复我的项目?

由于我刚刚开始使用Git,我很抱歉找不到解释。

4 个答案:

答案 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

创建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's dag的叶子,其中一片叶子将成为你的老枝。

命令git rev-list --objects --all显示空闲中的每个对象,git cat-file可以检查这些对象。

git rev-list --objects --all --graph会尝试绘制与您的提交一样模糊的图形。我不太确定输出是什么,但第一个结果是我的主人。