Gitはローカルブランチの削除を元に戻します


377

で必要な実験的な変更を加えて、間違ったブランチを削除しましたgit branch -D branchName

ブランチを回復するにはどうすればよいですか?


7
私がこれをした唯一のlame-oではないことを知ってうれしい(そして定期的にリモートコピーをプッシュするのを忘れた)
Ray

回答:


719

git reflogを使用して、ブランチの最後のコミットのSHA1を見つけることができます。その時点から、次を使用してブランチを再作成できます

git branch branchName <sha1>

編集: @seagullJSが言うように、branch -Dコマンドはsha1を通知するので、まだターミナルを閉じていなければ、それは本当に簡単になります。たとえば、次の名前のブランチを削除してすぐに復元しmaster2ます。

user@MY-PC /C/MyRepo (master)
$ git branch -D master2
Deleted branch master2 (was 130d7ba).    <-- This is the SHA1 we need to restore it!

user@MY-PC /C/MyRepo (master)
$ git branch master2 130d7ba

71
Gitは、ブランチが削除されたときのSHA1を教えてくれるので、それを削除しただけでは、コマンドラインに数行しか表示されない可能性があります。
seagullJS 2012

このブランチがサーバーに存在する場合は、代わりに次を使用できますgit branch branchName origin/branchName
Florian Castellane

さらに、git cherry-pick <sha1>を使用してコミットをブランチに移動しました
Akin Okegbile

54

ブランチの最後のSHA1がわかっている場合は、

git branch branchName <SHA1>

SHA1 git reflogは、こちらのソリューション説明されているを使用して見つけることができます。


34

まだ削除をプッシュしていない場合は、単に次のようにすることができます。

$ git checkout deletedBranchName

この答えにより、Git Extensionsは「プッシュしようとしているブランチはこのリモートの新しいブランチのようです」と黙ってしまいます。どうもありがとう。
Omer

29

ブランチを削除すると、ターミナルに次のようなものが表示されます。

Deleted branch branch_name(was e562d13)
  • ここで、e562d13は一意のID(別名「SHA」または「ハッシュ」)であり、これにより、削除したブランチを復元できます。

ブランチを復元するには、以下を使用します。

git checkout -b <branch_name> <sha>

git checkout -b branch_name e562d13 

4

最初に、.gitディレクトリを含むディレクトリ全体をバックアップします。

2番目:を使用git fsck --lost-foundして、失われたコミットのIDを取得できます。

3番目:失われたコミットにリベースまたはマージします。

4番目:gitで-Dまたは--forceを使用する前に、常に2度考えてください。

この種のエラーから回復する方法についてこの良い議論読むこともできます。

編集:ちなみに、実行しないでくださいgit gc(または、単独で実行できるようにします。つまり、実行しないgit fetchか、または類似したものを実行します)。そうしないと、永久にコミットが失われる可能性があります。


1
1と4はやりすぎIMOです。
jwg 2013年

ええ、それが私たちがgitを使用する理由です。コミットしたすべてのアクションは引き続き使用できます。
mateor 2013年

4

ありがとう、これでうまくいきました。

gitブランチnew_branch_name sha1

git checkout new_branch_name

//チェックインした古いファイルを古いブランチに表示できます


3

次の手順を実行します:

1:入力:

git reflog show 

これはすべてのコミット履歴を表示します。取得したい最後のコミットがあるsha-1を選択する必要があります

2:選択したSha-1 IDを使用してブランチ名を作成します。例:8c87714

git branch your-branch-name 8c87714

0

これは私のために働きました:

git fsck --full --no-reflogs --unreachable --lost-found
git show d6e883ff45be514397dcb641c5a914f40b938c86
git branch helpme 15e521b0f716269718bb4e4edc81442a6c11c139
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.