Githubにリモートで削除されたブランチを復元する方法があるかどうか疑問に思っていました。履歴は明らかにブランチの記録を保持し、他のブランチとマージしますが、削除されたブランチを復元できるかどうかはわかりません。
ありがとう。
はい、削除されたブランチをgitから復元できます。
過去30日以内にローカルgitリポジトリにブランチがあった場合、次を使用して reflogで検索 できる場合があります。
git reflog
Reflogでブランチ名を検索し、HEAD{x}
ポイントまたはコミットID。
git checkout -b branch_name HEAD@{27}
コミットIDをチェックアウトして、そのコミットポイントからブランチを作成できます。
git checkout -b branch_name <commit id>
GitHubのサポートを依頼して、リモートリポジトリのreflog
を調べるようにすることができます( たとえば、このスレッドのように )。
これが削除から十分に近い場合(デフォルトで30日未満)、reflogにはまだブランチによって参照されなくなったコミットが含まれています。
これらのコミットの1つにブランチを作成すると、再びアクセスできるようになります。
Reflogの詳細については、「 一体何がreflogであり、なぜそれがそれほど重要なのか? 」を参照してください。
更新:レポジトリの所有者は、GitHub EVents APIをクエリすることもできます:
「 GitHubはコミットIDを覚えていますか? 」を参照してください。
ブランチが非常に長い時間(私の場合は1年)削除されたが、そのブランチのプルリクエストを開いていた場合、プルリクエスト履歴で検索することで、ブランチを復活させることができます。
そのブランチのプルリクエストが見つかったら、ブランチを復元できます。関連するコミット情報などもプルリクエストから入手できます。
git reflog
はHEAD
の履歴を表示します。削除したブランチの名前がfoo
である場合、その出力には48534f5 HEAD@{0}: checkout: moving from master to foo
や48534f5 HEAD@{1}: merge foo: Fast-forward
などの行が表示されます。 git reflog
の出力を検索して、fooが指し示した最新のコミットでなければならないコミットを見つけることができます。
Fooが削除されたときに「foo」reflogファイル自体も削除されますが、HEADのreflogが異なるため、まだ存在していることを理解してください。
これを見てくださいpython githubイベントのスクリプト。 https://github.com/jimzucker/githubutils/blob/master/githubreflog.py
イベントをプルして読み取り可能にするために作成しました。それをgrepにパイプして、興味のあるブランチを探します。十分な履歴がある場合は、問題のブランチの削除イベントが表示され、次の行になります最後のプッシュイベントであり、それがあなたが興味を持っているshaです。