在git revert --abort command

时间:2016-01-03 02:21:39

标签: git git-revert

我想我完全搞砸了。

我已经在一个项目上工作了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 diff:

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

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

1 个答案:

答案 0 :(得分:0)

首先备份整个文件夹以开始。

中学:是的,如果您已提交文件,可以吗?

您是否承诺或至少git add他们?

如果你生病了解了解如何找到它们并让它们回来,

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

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

诀窍是检查上次提交的上一次提交(这应该是你问题中的还原提交)

然后使用插入符号(^)符号检查提交时的版本:

git checkout <last good commit>^ 

技巧是^代表前一次提交

  

我也做了git add,他们在准备提交的暂存区域,但我从未通过提交部分。

以下是有关如何丢失文件的示例 enter image description here

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

  1. 备份文件夹(正如您所做的那样)
  2. 执行git fsck --full
  3. 如何恢复丢失的文件

    enter image description here

    执行git fsck --full然后循环查看文件,使用git cat-file -p <SHA>

    检查哪一个是你的

    正如您在示例图片中看到的那样,我设法恢复了我未提交的文件b.txt