[git] 間違って削除した branch を復元する方法

git の branch を間違えて削除してしまったときの対応方法を説明します。

環境&対象

以下の環境で動作確認を行なっています。

  • git version 2.30.1

git のブランチを復元する方法

git の branch を削除

Git の branch は、以下の方法で削除することができます。


% git branch -D 

Branch を trunk にマージした後や、不要になった branch は残しておかずに、削除する方が管理面からは推奨されています。

ただ、誤って branch を削除してしまうこともありますよね。勘違いだったりが原因です。

削除した branch の中身が 新規実装機能だったりすると、頭真っ白になります。

なにしろ、それまでの 努力がなくなってしまったのですから・・・

でも、git を使っているなら大丈夫です。削除してしまった branch もまだそこに存在しています。

git の branch を復元

操作例の状況説明

以下の状況を前提として操作例を説明していきます。

  • trunk は、master という名称
  • branch は、NewBranch という名称
  • NewBranch でファイルを編集して commit した
  • master に切り替えて作業していた
  • NewBranch を master にマージする前に誤って削除してしまった

削除後は、NewBranch という branch は見えません。(当たり前)

でも、git の履歴の中には残っていますので、その履歴を使って 復元していきます。

復元作業を開始する前に、落ち着くのが大切です。

ログの確認

まずは、git のログを確認します。ログといっても、通常のログではなく ブランチの移動等のログを確認します。以下のコマンドで、ログを確認してください。


% git reflog

そうすると、以下のようなログが確認できます。


% git reflog
0ec60f5 (HEAD -> master) HEAD@{0}: checkout: moving from NewBranch to master
6a4c9e1 HEAD@{1}: commit: update test.swift
0ec60f5 (HEAD -> master) HEAD@{2}: checkout: moving from master to NewBranch
0ec60f5 (HEAD -> master) HEAD@{3}: commit (initial): add dummy file

一番上にある行が最新の操作です。下に行くに従って古い操作を表しています。それぞれの行の意味を確認していきます。


// master を checkout した
0ec60f5 (HEAD -> master) HEAD@{0}: checkout: moving from NewBranch to master
// commit した (コメントによると test.swift をアップデートした)
6a4c9e1 HEAD@{1}: commit: update test.swift
// NewBranch を checkout した
0ec60f5 (HEAD -> master) HEAD@{2}: checkout: moving from master to NewBranch
// commit した(コメントによると 新しいファイルを追加した)
0ec60f5 (HEAD -> master) HEAD@{3}: commit (initial): add dummy file

復元したい branch に commit した 操作を探す

ログを確認していき、削除してしまった branch に最後に commit したものを探します。

上記の例では、2行目の”6a4c9e1 HEAD@{1}: commit: update test.swift” がそれに該当します。

新しい branch として復元する

git に対して、新しい branch を作成します。branch 作成時に、操作を指定して branch を作成することができます。


% git branch recover HEAD@{1}
% git branch
* master
  recover

この時の "recover" branch が復元したい branch を含む branch になっています!

以下のコマンドで、checkout して、内容が戻っているか確認すれば OK です。


% git checkout recover

まとめ:あやまって削除した branch の復元方法

あやまって削除した branch の復元方法
  • 落ち着く
  • git reflog を使用して、削除してしまった branch への最終コミットを探す
  • 最終コミット操作を指定して、branch を作成する
  • 作成した branch を checkout すると、削除された branch が復元されている!

git おすすめ本

いまや git は必須ツールの1つになりました。

まずは、一通りの使い方をおさらいしておくのがおすすめです。

# 意外と色々なことができます。

説明は以上です。
不明な点やおかしな点ありましたら、こちらまで。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です