問題タブ [git-fsck]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
git - 「git rm -rf」の後にステージングされたがコミットされていないファイルを回復する
ローカル マシンで、フォルダからファイルを削除しました。
それから私は書いた(なぜ私に聞かないでください!:))
私はまだコミットしていません。現在、プロジェクトに空のフォルダーがあります。.git
フォルダには53 objects
Mb のファイルがあります。
ファイルを復元するにはどうすればよいですか? Drill Disc や Stellar などのプログラムを試しましたが、ファイルが見つかりません。また、GIT からロールバックできません。
失われたファイルを回復するにはどうすればよいですか?
git - Git リポジトリのダングリング コミットと BLOB とは何ですか? また、それらはどこから来るのですか?
ダングリング コミットとブロブに関する基本的な情報を探しています。
私のリポジトリは問題ないようです。しかし、私はgit fsck
それが何をしたかを確認するために初めて実行し、「ぶら下がっているブロブ」と単一の「ぶら下がっているコミット」の長いリストを持っています。
これらは何ですか?彼らはどこから来ましたか?それらは私のリポジトリの状態について異常な (良いまたは悪い) ことを示していますか?
git - 特定のツリーを導入する最初のコミットを見つける方法は?
git fsck
次の出力が与えられた場合
この偽のツリーを導入した最初のコミットを見つけるにはどうすればよいですか?
git - 不正なファイルが原因で Git から Mercurial への変換が失敗する
Git リポジトリを Mercurial に変換しようとしています。途中で次のエラーで失敗します。
git fsck
git リポジトリ内で実行してもエラーは表示されません。
問題がどこにあるかをどのように把握し、どのように修正できますか?
git - HEAD^ のツリーを復元するにはどうすればよいですか?
tl;dr:HEAD^
のツリーが削除され、事前にプッシュされておらず、他のすべてが無傷である場合、そのツリーを復元することは可能ですか?
の一部を誤って削除してしまいました.git
。何が欠けているのか完全にはわかりません。
git push
それが機能しないことを発見すると、次のように実行しましたgit fsck
:
したがって、私の推測では、GitHub から復元できる情報が不足しているだけだと思います。私のひざまずいた反応は run でしたがgit fetch
、取得する新しいものは何もないと見なされるため、何も出力されずに返されます。
いくつかの方法で開梱を試み.git/objects/pack/pack-ea43d1db155e4502c2250ec1d4608843715c8b1f.pack
ましたが、うまくいきませんでした。例えば:
毎回このエラーが発生しました。(心に留めておいてください: これは--mirror
であるため、 GitHub にあるものの正確なコピーです。そうですよね? どうして破損している可能性がありますか?)
最終的に、パックファイルを実際に解凍する必要がないことに気付きました。それを元のリポジトリにコピーして戻すだけで、Git はそれを問題なく取得します。そう:
そして、それはうまくいくように見えました。多くの場合。
ご覧のとおり、欠落しているリンクは 1 つを除いてすべて修復されました。結局のところ、はまだプッシュしていないdb238d
コミット (たまたま ) の ID です。HEAD^
このリポジトリの最後の 2 つのコミットは回復不能であり、それらのコミットの内容を再作成する必要があると仮定するのは正しいですか? このシナリオで正しい決定を下しましたか?
git - git fsck --full --verbose のログを取得する方法
git fsck --full --verbose
の出力をログ ファイルに記録するにはどうすればよいですか?
で試しました
と
しかし、どちらも私のために働いていません。私は何をすべきか?
git - git pack-index コマンドを起動せずに大きな git リポジトリをプッシュする方法は?
私はこの質問について知っています。私はすでにローカルでの変更を実行しましたが、公式の git プロジェクトは、git fsck
オリジンにプッシュする前にローカルで実行しているようです。
そしてコマンドは失敗します…
問題は、パック形式で許可されている間(size_t または unsigned long) 、公式の git プロジェクトでは、ツリー オブジェクトのサイズ(2Gb に制限)を処理するために内部で 32 ビットの符号付き整数を使用することです。
プッシュする前に fsck を実行しないコマンドはありますか? または別のプロジェクト/ライブラリ(libgit2でそれを行う方法が見つかりませんでした)を使用して、ラップトップにとどまることができますか?
別の方法として、git over ssh プロトコルに関するドキュメントを取得することもできます。これにより、その部分を自分で実装できます。