私は校長の子供が犬が私の宿題をその前夜に食べたことを説明しているように感じますが、私は顔にいくつかのクレイジーなデータ損失のバグを見つめています、そしてそれがどのように起こったのかわかりません。gitがリポジトリ全体をどのように食べられるかを知りたい!私はgitを絞り器に何度も入れましたが、点滅することはありません。20 Gig Subversionリポジトリを27 gitリポジトリに分割し、それらからfooをフィルター分岐して混乱を解き、1バイトも失わないようにしました。reflogは常にフォールバックします。今回はカーペットがなくなった!
私の観点からすると、私がしたことはすべて実行されgit pull
、ローカルリポジトリ全体が無駄になりました。「チェックアウトされたバージョンを台無しにした」、「私がいたブランチ」、またはそのようなものを意味するものではありません。私が意味する、全体の事がなくなっています。
この事件の私の端末のスクリーンショットは次のとおりです。
その手順を説明します。コマンドプロンプトには現在のgitリポジトリに関するデータが含まれているため(preztoのvcs_info実装を使用)、gitリポジトリが消えた時点を確認できます。最初のコマンドは十分に正常です:
» caleb » jaguar » ~/p/w/incil.info » ◼ zend ★ »
❯❯❯ git co master
Switched to branch 'master'
Your branch is up-to-date with 'origin/master'.
そこには、私が「zend」ブランチにいて、マスターをチェックアウトしたことがわかります。ここまでは順調ですね。次のコマンドの前のプロンプトで、ブランチが正常に切り替えられたことがわかります。
» 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コマンドを実行しようとしました。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からの2、3のヒントを以下に示します。
[branch]
autosetuprebase = always
rebase = preserve
[pull]
rebase = true
[rebase]
autosquash = true
autostash = true
[alias]
co = checkout
たとえばgit pull
、マージの代わりに常にリベースを行うように設定しているため、上記の出力の一部は正常です。
データを回復できます。他のリポジトリにプッシュされていない重要でないスタッシュ以外のgitオブジェクトはないと思いますが、何が起こったのか知りたいです。
私はチェックしました:
- dmesgまたはsystemdジャーナルのメッセージ。リモートでも関連するものはありません。
- ドライブまたはファイルシステムの障害の兆候はありません(LVM + LUKS + EXT4はすべて正常に見えます)。lost + foundには何もありません。
- 他には何もしませんでした。私が上に示していない歴史には何もありませんし、この期間中に他の端末は使用されませんでした。
rm
間違ったCWDなどで実行された可能性のあるコマンドはありません。 - 別のディレクトリの別のgitリポジトリを突くと、
git pull
sを実行している明らかな異常はありません。
ここで他に何を探すべきですか?
.git
存在するものはありません。何もしません— gitルートディレクトリであったものには何も含まれていません。