【问题标题】:Undo git reset without any commits yet在没有任何提交的情况下撤消 git reset
【发布时间】:2018-07-09 03:20:12
【问题描述】:

我最近想更新远程 git 存储库上的代码。我没有意识到它甚至还没有承诺。我确实创建了一些错误,所以我想将分支重置为之前的状态。

如你所料,我使用了git reset --hard。

好吧,从那以后一切(整个项目)都消失了;当然,.gitignore 文件/文件夹除外。我一直在想,有什么办法可以撤销吗?

我做的唯一步骤:

git add .
# Here I realized there is a bug in what I did
# I thought myself it would be better to undo that as it wasn't even something needed
git reset --hard 

另外,我想指出这可能与这里的任何问题都不重复,因为其他人之前也有过一些提交。那是全新的存储库,并且已经“硬重置”。

【问题讨论】:

  • 通常,你(.git)忽略的东西会被生成,你会git clean -X然后生成它们。您的使用可能会有所不同。除此之外,由于您告诉 git 忽略这些文件,git 不会以任何方式跟踪它们,因此 git 不知道这些被忽略文件中的任何版本。
  • git reflog 告诉你什么?实际上,如果您还没有提交任何内容,那么您应该无法重置。如果它有效,你实际上失去了一切。
  • @ckruczek 是的,我也有同样的想法,但事实恰恰相反。鲁迪能够写下很好的答案(我猜)。它肯定恢复了一些东西,但我无法阅读它,因为编码很糟糕,我不知道它是哪一个。如果我能以某种方式阅读它们,我会告诉你的。
  • 我意识到我不小心打开了一张图片,这解释了奇怪的编码。所以@Rudi 是对的,而且帮助很大。为他点赞。

标签: git reset git-reset


【解决方案1】:

您可以在添加文件的状态下恢复文件,但没有文件名。使用git fsck,您将获得一个未被任何提交引用的文件列表。

$ git fsck
Checking object directories: 100% (256/256), done.
Checking objects: 100% (1/1), done.
dangling blob c7c49b553f1b8c3c8f7955780e5dfdb934ce26db
dangling tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904
dangling blob 4f92ab465171608a2c713f2f5439143df2c8afc9
dangling blob 9c1216eb500c0fc2c55c263a9cf221f282c3cd7b

然后就可以使用git cat-file获取文件内容了:

for blob in `git fsck | grep 'dangling blob' | cut -d\  -f3` ; do git cat-file -p $blob > $blob ; done

或者你也可以使用git fsck --lost-found,它将所有悬空对象放入.git/lost-found/

【讨论】:

    猜你喜欢
    • 2018-06-17
    • 2012-03-27
    • 2020-05-13
    • 2020-11-16
    • 2020-05-07
    • 2017-04-11
    • 1970-01-01
    • 2012-09-27
    • 2011-10-19
    相关资源
    最近更新 更多