我感觉像是校长办公室里的一个孩子,解释那只狗在到期前一天晚上吃了我的作业,但是我盯着脸上的一些疯狂的数据丢失错误,我不知道它是怎么发生的。我想知道git如何吃掉我的整个仓库!我已经把git穿过绞拧器很多次了,而且从未眨眼。我用它来将20 Gig Subversion存储库拆分为27个git存储库,并过滤掉其中的foo以解开混乱,而且它从未对我造成任何损失。reflog总是在那里回落。这次地毯不见了!
从我的角度来看,我所做的只是运行,git pull
并且它破坏了我的整个本地存储库。我不是说它“搞乱了已签出的版本”或“我所在的分支”或类似的名称。我的意思是整个事情都没了。
这是事件发生时我的终端的屏幕截图:
让我来指导您。我的命令提示符包含有关当前git repo的数据(使用prezto的vcs_info实现),因此您可以查看git repo何时消失。第一个命令足够正常:
» caleb » jaguar » ~/p/w/incil.info » ◼ zend ★ »
❯❯❯ git co master
Switched to branch 'master'
Your branch is up-to-date with 'origin/master'.
在那里,您可以看到我在“ zend”分支上,并检出了master。到现在为止还挺好。您将在下一条命令之前的提示中看到它已成功切换分支:
» caleb » jaguar » ~/p/w/incil.info » ◼ master ★ »
❯❯❯ git pull
remote: Counting objects: 37, done.
remote: Compressing objects: 100% (37/37), done.
remote: Total 37 (delta 25), reused 0 (delta 0)
Unpacking objects: 100% (37/37), done.
From gitlab.alerque.com:ipk/incil.info
+ 7412a21...eca4d26 master -> origin/master (forced update)
f03fa5d..c8ea00b devel -> origin/devel
+ 2af282c...009b8ec verse-spinner -> origin/verse-spinner (forced update)
First, rewinding head to replay your work on top of it...
>>> elapsed time 11s
就像那样,它消失了。如果已超过10秒,则经过的时间标记会在下一个提示之前输出。Git没有提供任何输出,只是通知它正在重播。没有迹象表明它完成了。
下一个提示不包含有关我们位于哪个分支或git状态的数据。
没注意到它失败了,我显然是试图运行另一个git命令,只是被告知我不在git repo中。请注意,PWD尚未更改:
» caleb » jaguar » ~/p/w/incil.info »
❯❯❯ git fetch --all
fatal: Not a git repository (or any parent up to mount point /home)
Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).
之后,环顾四周表明我位于一个完全空的目录中。没有。没有'.git'目录,什么也没有。空的
我本地的git版本是2.0.2。这是我的git config中的一些花絮,可能与弄清楚发生了什么有关:
[branch]
autosetuprebase = always
rebase = preserve
[pull]
rebase = true
[rebase]
autosquash = true
autostash = true
[alias]
co = checkout
例如,我已git pull
设置为始终进行重新设置而不是合并,因此上面输出的一部分是正常的。
我可以恢复数据。我认为除了一些不重要的存储区没有被推送到其他存储库之外,没有其他git对象,但是我想知道发生了什么。
我已经检查过:
- dmesg或systemd日记中的消息。没有任何关系。
- 没有迹象表明驱动器或文件系统出现故障(LVM + LUKS + EXT4看起来都很正常)。失物招领中没有任何东西。
- 我什么也没跑。我上面没有显示的历史记录中没有任何内容,并且在此期间未使用其他终端。没有
rm
可能在错误的CWD中执行的命令浮动等等。 - 拨入另一个目录中的另一个git repo不会显示执行
git pull
s的明显异常。
我还要在这里找什么?
.git
不存在。什么也没做-以前是git根目录,根本没有任何内容。