我想我完全搞砸了。
我已经在一个项目上工作了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
所以我只是将所有已更改的文件复制回原始仓库,一切都很好。
答案 0 :(得分:0)
首先备份整个文件夹以开始。
中学:是的,如果您已提交文件,可以吗?
git add
他们?如果你生病了解了解如何找到它们并让它们回来,
如果您至少没有将它们添加到索引中,那么您就丢失了它们 更新我,并相应地更新我的答案。
诀窍是检查上次提交的上一次提交(这应该是你问题中的还原提交)
然后使用插入符号(^)符号检查提交时的版本:
git checkout <last good commit>^
技巧是^
代表前一次提交
我也做了git add,他们在准备提交的暂存区域,但我从未通过提交部分。
所以你得救了(但你仍然有一些工作在你面前。)