ドロップされた Git スタッシュ、削除されたブランチ、または失われたコミットを回復する方法
ドロップされたスタッシュや削除されたブランチが永久に失われることはほとんどありません。Git はガベージ コレクションによってコミットが削除されるまでコミットを保持します。 reflog または git fsck を使用してそれらを検索し、保持している内容を確認して、手遅れになる前にブランチに戻します。
作者 Kodmora
GitTree の背後にあるソフトウェア ハウス
- 隠し場所
- 元に戻すと回復
このページでは
スタッシュを削除するかブランチを削除すると、Git はコミットではなく名前を削除します。 コミットは、ガベージ コレクションによって削除されるまで (通常は 2 週間以上後)、到達不能オブジェクトとしてリポジトリに残ります。 git reflog を使用して reflog で削除されたブランチの最後のコミットを検索し、git fsck --unreachable を使用して削除されたスタッシュを検索し、git show を使用して確認してから、git branch rescue <sha> を使用して保持します。
このガイドでは、各ケースについて正確なコマンドを説明し、Git が失われた作業を保持する期間と復元できないものについて説明し、GitTree の Lost & Found での同様の復元を示します。これは、すべてのソースを一度に検索し、何もチェックアウトしたりリセットしたりしません。 Lost & Found は GitTree の無料プランの一部です。リセット、リベース、または修正を元に戻すには、代わりに git リセット、リベース、コミットを元に戻す方法 をお読みください。
「失われた」Git 作業が実際に存在する場所
ブランチ、タグ、スタッシュ、または HEAD がコミットに到達すると、コミットに到達できます。ブランチを削除したり、スタッシュをドロップすると、コミットは到達できなくなりますが、コミットは .git/objects に残ります。それらを見つけるには、各ブランチと HEAD が以前に指した reflog と、git fsck が検索できるオブジェクト データベース自体の 2 つのレコードが役立ちます。
| あなたが失ったもの | どこを見るべきか | 指示 |
|---|---|---|
| チェックアウトした削除されたブランチ | HEADのリフレッグ | git reflog |
| チェックアウトしていない削除されたブランチ | 到達不能なコミット | git fsck --unreachable |
| ドロップまたはクリアされた隠し場所 | 到達不能なマージシェイプされたコミット | git fsck --unreachable | grep commit |
| リセットまたはリベース後にコミットが失われる | ブランチのリブログ | git reflog show <branch> |
| コミットまたはスタッシュされていない変更 | Git のどこにもありません | Git からは回復できません |
削除されたブランチを復元する
ブランチを削除すると、Git はブランチの最後のコミットを出力します (Deleted branch feature/login (was 3f2a9c1))。そのメッセージが消えている場合は、HEAD の reflog で最後にブランチにいた時間を検索し、そのコミットでブランチを再作成します。
# find the last commit of the branch
git reflog | grep "feature/login"
# check what it holds
git show 3f2a9c1 --stat
# put the branch back
git branch feature/login 3f2a9c1落ちた隠し場所を回復する
スタッシュは削除されると独自の reflog を持たないため、到達不能なコミットを検索します。スタッシュはマージ形式のコミットであり、メッセージが WIP on または On <branch>: で始まるため、フィルタリングが簡単になります。これは、Git 自身の stash ドキュメントで説明されている方法です。
# list unreachable stash-like commits, newest first
git fsck --unreachable | grep commit | cut -d" " -f3 \
| xargs git log --merges --no-walk --grep=WIP --format="%h %cr %s"
# inspect a candidate
git stash show -p 7c1e0b4
# restore it into your working tree, or keep it on a branch
git stash apply 7c1e0b4
git branch rescue-stash 7c1e0b4git fsck --lost-found を使用してすべての未解決コミットを検索します
git fsck --lost-found は未解決コミットをリストし、それぞれのコピーを ID で名前を付けて .git/lost-found/commit/ に書き込みます。何を探しているのかわからない場合に使用します。日付とメッセージとともにリストを表示し、必要なものから分岐します。
git fsck --lost-found
ls .git/lost-found/commit | xargs git log --no-walk --format="%h %cr %s"
git branch rescue 9d44b0eGitTree の Lost & Found で失われた作品を復元しましょう
遺失物を開く
[ツール] → [遺失物] を選択するか、
Alt+Shift+Dを押します。 スタート ページでフル ウィンドウとして開き、検索する 3 つのソース (reflog、GitTree のリカバリ参照、到達不能オブジェクト) について説明します。地元の仕事を探す
到達不能なオブジェクトのより詳細なスキャンを含めるにチェックを入れて、ドロップされた隠し場所も検索し、ローカル作業の検索を押します。 見つかった作品 には、各結果とそのソース、いつ表示されたかがリストされています。 コミット、メッセージ、またはソースでフィルターすると、リストが絞り込まれます。
保管する前に点検してください
結果を選択します: このオブジェクトが表示される理由 には証拠が表示され、その横にメッセージとファイルが表示され、各ファイルのコンテンツが開きます。何もチェックアウトまたは適用されません。
ブランチに置いておく
このコミットを保持するで、新しいブランチ名を入力し、回復ブランチの作成を押します。 Recovered にはブランチがリストされます。 グラフで表示 をクリックするとそこにジャンプします。チェックアウト ファイルと作業ファイルは変更されません。

Git が失われたコミットを保持する期間
| 設定 | デフォルト | 何を制御するのか |
|---|---|---|
gc.reflogExpire | 90日 | コミットの Reflog エントリはまだ到達可能です |
gc.reflogExpireUnreachable | 30日 | コミットの Reflog エントリにアクセスできなくなりました |
gc.pruneExpire | 2週間 | reflog エントリのない到達不能オブジェクト (ドロップされたスタッシュなど) |
ガベージ コレクションはいくつかのコマンドの後に自動的に実行されるため、これらはウィンドウであり、約束ではありません。早く見れば見るほど、より多くのことが見つかります。チームメイトのクローンやプッシュされたブランチなど、他の場所にあるコピーは、もう 1 つのセーフティ ネットです。コンピュータ上でのみ失われた作業は、そこにのみ存在します。
回復できないもの
- コミットも隠蔽もされていない変更(
git checkout -- <file>またはgit restoreで破棄された編集など)。 -uで作成されたスタッシュに存在しない追跡されていないファイル。- ガベージ コレクションが既にプルーニングされていることをコミットします。
- 他人のコンピュータ上にのみ存在していた作品。
次のステップ: 遺失物ガイド ではすべてのページとボタンについて説明し、前のブランチ ヒントの検索 では reflog ビューについて説明し、git stash ガイド では、ファイルの適用、ポップ、および追跡されていないファイルについて説明しているため、リカバリの必要性が低くなります。
よくある質問
ドロップされた git スタッシュを回復できますか?
通常、はい。ドロップされたスタッシュは、ガベージ コレクションによってプルーニングされるまで、到達不能なコミットになります。 git fsck --unreachable で検索し、git stash show -p <sha>、次に git stash apply <sha> または git branch <name> <sha> で検査します。
Git で削除されたブランチを復元するにはどうすればよいですか?
git reflog でブランチの最後のコミット (または、削除したときに Git が出力した「was <sha>」というメッセージ) を見つけて、git branch <name> <sha> を実行してブランチを元に戻します。
未解決コミットとは何ですか?
ブランチ、タグ、スタッシュ、または reflog エントリがポイントしていないコミット。 git fsck --lost-found はそれらをリストし、.git/lost-found/commit/ にコピーして検査できるようにします。
git gc は失われたコミットを削除しますか?
はい、有効期限設定より古い場合は可能です。デフォルトでは、reflog エントリのない到達不能オブジェクトは 2 週間後に削除されます。作業内容を回復するまでは、git gc と git prune を避けてください。
コミットしていない変更を復元できますか?
Git からではありません。コミットまたはスタッシュされた作業のみがオブジェクト データベースに存在します。編集者のローカル履歴またはバックアップが参考になります。
GitTree の遺失物は無料ですか?
はい。 Lost & Found は GitTree の無料プランの一部です。ローカル リポジトリを読み取るだけで、変更は要求された回復ブランチのみです。
情報源
他の製品に関する申し立ては、2026年11月5日 の公式ページと照合して確認されました。価格と機能は変更されます。ベンダーのページが真実の情報源です。