在 git revert --abort 命令后丢失了所有我暂存但未提交的修改

Lost all my staged but uncommited modifications after git revert --abort command

我想我完全搞砸了。

我已经在一个项目上工作了 2 天,我在 emacs 中尝试 Magit 来提交项目,但我一直没有完成提交就回到暂存区。

长话短说,我退出了 emacs 并回到了命令行,文件一切正常,但是 git status 说我应该做 git revert --abort 或其他一些我不知道的选择现在回想一下。

好吧,git revert --abort 似乎没问题,因为我想中止 git 正在做的事情并保留我的文件,但实际上它把我所有的文件都带到了最后一次提交。

我已经浪费了数小时的工作时间。有什么办法可以回到发出这条命令之前的状态吗?

我的 git reflog 是:

5fba267 HEAD@{0}: commit: Clones the spacemacs repo needed for emacs
2c9ced3 HEAD@{1}: commit: Major changes to emacs configuration
d38f9db HEAD@{2}: commit: add initial emacs configuration and vimwiki
e0e28d0 HEAD@{3}: commit: Vim whitespace showing modifications

我所做的工作都是在那之后 5fba267 HEAD@{0}


编辑答案:codeWizard 的宝贵帮助下,我最终做到了。

使用 dangling blob 效果不佳,因为那里几乎没有文件。这可能是因为在尝试解决它时,我将其中一个文件改回了上次签出的状态,并且 git 从悬空文件中删除了其他文件。

但是,所有需要的信息实际上都在 dangling commit 部分。

这就是我在 codeWizard

的帮助下所做的

首先,完整复制您的存储库目录,然后只从那里开始工作。

接下来发出 git 命令:

git fsck --full

它输出如下内容:

Checking object directories: 100% (256/256), done.
dangling blob 0c8676d28b6b063592493bce281530fb7098a41c
dangling blob 5040b2db1a895ea4aa69c993e0df7cd48823eaec
dangling blob 5ffc6f27406506a01aa13e9b773b574840cef7ac
dangling blob 676efa400477c8d92787a39978f73114f39e0f89
dangling commit 8a44f14eb0821859c0e1cdf0d81038c8431a1007
dangling commit 968e27b0d49b899ab2d43a964b561e4dfd2aa41f
dangling commit 9f5e56caa8b904d93acd43b05f3817ff975a0423

现在,使用 SHA 显示 dangling commit

git show - p 8a44f14eb0821859c0e1cdf0d81038c8431a1007

输出实际上将是 暂存但从未提交的 更改的 git 差异:

commit 8a44f14eb0821859c0e1cdf0d81038c8431a1007
Author: Me <me@gmail.com>
Date:   Sun Jan 3 02:07:10 2016 +0000

    oO

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..ec6eec8
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+/#bootstrap.sh#
+/emacs.d/#init.el#
+*~
diff --git a/bootstrap.sh b/bootstrap.sh

你需要做什么来检查 Date 并找到适合你的那个(实际上它们对我来说都是同一时期的)。

之后你只需要发出命令: git checkout 8a44f14eb0821859c0e1cdf0d81038c8431a1007

并且您将添加要提交但您从未提交过的所有文件。

我发现的唯一问题是在那之后你将得到 git status:

HEAD detached at 8a44f14 
nothing to commit, working directory clean

所以我只是将所有更改的文件复制回我的原始存储库,一切都很好。

首先备份整个文件夹。

二级:是的,如果您提交了文件,可以吗?

您是否提交或至少 git add 他们?

如果您没解释清楚如何找到它们并取回它们,

如果您至少没有将它们添加到索引中,那么您就丢失了它们。
更新我并相应地更新我的答案。


如何恢复已删除的文件(假设它们已提交)

诀窍是检查最后一次良好提交的先前提交(这应该是您问题中的还原提交)

然后使用脱字符 (^) 符号检查之前提交时的版本:

git checkout <last good commit>^ 

诀窍是 ^ 代表上一次提交


I also did the git add and they were in the staging area ready to commit, but I've never passed the commit part.

这是一个关于如何丢失我的文件的示例

所以你得救了(但你面前还有一些工作。)

  1. 备份文件夹(就像你已经做的那样)
  2. 执行git fsck --full

如何恢复丢失的文件

执行git fsck --full然后遍历文件使用git cat-file -p <SHA>

检查哪个是你的

正如您在示例图像中看到的那样,我设法恢复了我的 un-commitd 文件 b.txt