Git で消したブランチを復活させる方法|誤って削除しても大丈夫!

git

「あっ、間違えて必要なブランチを消しちゃった…!」

Gitを使っていると、こんな冷や汗をかく瞬間がありますよね。実装途中のコードが入ったブランチを誤って削除してしまったとき、頭が真っ白になってしまうのも無理はありません。

でも安心してください。Gitで削除したブランチは復活できます

この記事では、誤って削除してしまったブランチを取り戻す方法を、初心者の方にも分かりやすく解説していきます。

スポンサーリンク

なぜ削除したブランチを復活できるの?

まず理解しておきたいのが、ブランチを削除してもコミット(変更履歴)自体は残っているという点です。

Gitにおいて、ブランチというのは「最新のコミットを指すポインタ」にすぎません。つまりブランチを削除しても、そのブランチで行った作業の記録(コミット)は、Gitの内部にしっかり保存されているんです。

これがGitの強力なバージョン管理機能の核心部分。すべての変更履歴を遡れる仕組みがあるからこそ、削除したブランチも復活させることができます。

方法1:削除直後ならハッシュ値をメモしておく(最も簡単)

ブランチを削除したとき、ターミナルにこんなメッセージが表示されませんでしたか?

Deleted branch feature-login (was a1b2c3d).

この a1b2c3d という部分がコミットハッシュ値です。これは削除されたブランチが最後に指していたコミットの識別番号のようなもの。

もしこの値をメモしていたら、次のコマンドで簡単に復活できます。

git checkout -b feature-login a1b2c3d

このコマンドの意味を分解すると:

  • git checkout -b:新しいブランチを作成して切り替える
  • feature-login:復活させるブランチの名前
  • a1b2c3d:復元したいコミットのハッシュ値

これで、削除したブランチが元通りに復活します。

覚えておきたいポイント

削除時に表示されるハッシュ値は「短縮版」です。完全なハッシュ値は40文字の英数字ですが、最初の7文字程度でも識別できるようになっています。

方法2:git reflogで履歴を辿って復元する(王道の方法)

「削除時のハッシュ値なんてメモしてない…」という方も大丈夫。git reflogというコマンドを使えば、過去の操作履歴から削除したブランチを見つけ出せます。

ステップ1:reflogで操作履歴を確認する

まず、次のコマンドを実行してみましょう。

git reflog

すると、こんな感じの履歴が表示されます。

a1b2c3d HEAD@{0}: checkout: moving from feature-login to main
b4c5d6e HEAD@{1}: commit: ログイン機能の実装完了
c7d8e9f HEAD@{2}: commit: ログインフォームのUI作成
a1b2c3d HEAD@{3}: checkout: moving from main to feature-login

reflogとは?

reflogは「Reference Log(参照ログ)」の略。ブランチの移動、コミット、マージなど、Gitで行ったあらゆる操作が時系列で記録されています。デフォルトでは90日間保存されるので、最近削除したブランチならほぼ確実に見つかります。

ステップ2:削除したブランチの最新コミットを探す

reflogの出力を見て、削除したブランチに関連する行を探します。

上の例だと、HEAD@{1} の行が「ログイン機能の実装完了」というコミットで、これが feature-login ブランチの最後の作業だったとします。

ここで注目するのは、行の先頭にあるハッシュ値 b4c5d6e です。

ステップ3:ブランチを復元する

ハッシュ値が分かったら、次のコマンドでブランチを復活させます。

git checkout -b feature-login b4c5d6e

または、HEAD@{番号} の形式でも指定できます。

git checkout -b feature-login HEAD@{1}

これで、削除前と同じ状態のブランチが復活しました!

別の書き方もあります

git branch feature-login b4c5d6e

この書き方だと、ブランチは作成されますが、自動的に切り替わりません。ブランチを作成した後、git checkout feature-login で切り替える必要があります。

方法3:リモートブランチから復元する(GitHub・GitLab利用時)

ローカルでブランチを削除しても、GitHubやGitLabなどのリモートリポジトリにまだ残っている場合があります。

リモートブランチの確認

まず、リモートにブランチが残っているか確認しましょう。

git branch -r

リモートブランチの一覧が表示されます。

origin/main
origin/feature-login
origin/develop

もし削除したブランチが origin/feature-login として残っていれば、簡単に復元できます。

リモートブランチから復元

git checkout -b feature-login origin/feature-login

このコマンドで、リモートの feature-login ブランチを元にローカルブランチを作成します。

すでにリモートも削除してしまった場合

リモートブランチも削除してしまった場合は、方法1や方法2のreflogを使った復元を試しましょう。ただし、一度もローカルにチェックアウトしていないブランチは、ローカルのreflogには記録されていません。

方法4:GitHubのPull Request経由で復元する

GitHubを使っている場合、削除したブランチで過去にPull Request(プルリクエスト)を作成していたなら、そこから復元できることがあります。

復元手順

  1. GitHubのリポジトリページで「Pull requests」をクリック
  2. 「Closed」タブを開く
  3. 復元したいブランチに関連するPull Requestを探す
  4. Pull Requestの下部に「Restore branch」ボタンがあればクリック

この方法なら、コマンド操作なしでブラウザだけで復元できます。

注意点

「Restore branch」ボタンが表示されるのは、ブランチが削除されてから一定期間内のみです。時間が経ちすぎている場合は表示されないこともあります。

方法5:git fsckで孤立したコミットを探す(上級者向け)

reflogでも見つからない場合の最終手段として、git fsck コマンドがあります。

git fsck --lost-found --unreachable | grep commit

このコマンドは、どのブランチからも参照されていない「孤立したコミット」を探し出します。

出力結果からコミットハッシュを見つけたら、次のコマンドで内容を確認できます。

git show コミットハッシュ

目的のコミットが見つかったら、方法1や方法2と同じようにブランチを作成して復元します。

この方法が必要になるケース

  • reflogの保存期間(90日)を過ぎている
  • git gc(ガベージコレクション)が実行された後
  • 複雑な操作をした後で履歴が追いづらい

復元時の注意点とトラブルシューティング

復元できる作業、復元できない作業

ブランチを復元したとき、復活するのはコミット済みの作業のみです。

復元できるもの

  • コミット済みのファイル変更
  • スタッシュに保存した作業(git stash

復元できないもの

  • コミットしていない変更(ワーキングディレクトリの変更)
  • 追跡されていないファイル(untracked files)

だからこそ、日頃からこまめにコミットする習慣が大切です。

git gcによるコミットの削除について

Gitは定期的に「ガベージコレクション」という処理を実行します。これは、どこからも参照されていない古いコミットを削除してリポジトリを最適化する機能です。

デフォルト設定では:

  • reflogのエントリは90日間保持
  • 到達不可能なオブジェクトは30日後に削除

つまり、ブランチを削除してから90日以内なら、高い確率で復元できるということです。

誤って別のコミットを復元してしまった場合

間違ったコミットでブランチを作ってしまっても慌てる必要はありません。

git branch -D 間違えたブランチ名

で削除して、もう一度正しいコミットで復元すればOKです。

予防策:ブランチを削除する前にできること

削除後の復元方法を知っておくのも大切ですが、そもそも誤削除を防ぐことも重要です。

削除コマンドの違いを理解する

Gitには2種類の削除コマンドがあります。

安全な削除(-d オプション)

git branch -d ブランチ名

このコマンドは、マージ済みのブランチしか削除できません。未マージのブランチを削除しようとすると、警告が出て削除を防いでくれます。

強制削除(-D オプション)

git branch -D ブランチ名

こちらは警告なしで強制的に削除します。確実に不要なブランチのみに使いましょう。

おすすめの使い分け

普段は -d を使い、本当に不要だと確信できるときだけ -D を使うようにすると、誤削除のリスクを減らせます。

リモートリポジトリにプッシュしておく

ローカルで作業中のブランチは、定期的にリモートリポジトリ(GitHub、GitLabなど)にプッシュしておくのが安全です。

git push origin ブランチ名

リモートに残っていれば、ローカルで削除してしまっても簡単に復元できます。

削除前に確認する癖をつける

ブランチを削除する前に、現在のブランチ一覧を確認する習慣をつけましょう。

git branch

削除しようとしているブランチが本当に不要か、もう一度確認できます。

まとめ:焦らず確実に復元しよう

Gitで削除したブランチは、適切な手順を踏めば復元できます。この記事で紹介した方法をおさらいしましょう。

状況別の復元方法

状況使う方法難易度
削除直後でハッシュ値をメモしているハッシュ値から復元★☆☆
削除から90日以内git reflog★★☆
リモートにブランチが残っているリモートから復元★☆☆
GitHubでPRを出していたPR経由で復元★☆☆
reflogにも残っていないgit fsck★★★

覚えておきたい重要ポイント

  • ブランチ削除してもコミットは残っている
  • reflogは90日間操作履歴を保持
  • こまめなコミットとリモートへのプッシュが最善の予防策
  • 削除時のハッシュ値をメモしておくと復元が簡単

Git操作で焦ってしまったときこそ、落ち着いて対処することが大切です。この記事で紹介した方法を試せば、きっと大切なブランチを取り戻せるはずです。

それでは、安心してGitライフを楽しんでください!

コメント

タイトルとURLをコピーしました