web-dev-qa-db-ja.com

githubは削除されたリモートブランチを履歴に保持しますか?その場合、それらを復元できますか?

Githubにリモートで削除されたブランチを復元する方法があるかどうか疑問に思っていました。履歴は明らかにブランチの記録を保持し、他のブランチとマージしますが、削除されたブランチを復元できるかどうかはわかりません。

ありがとう。

49
luisgo

はい、削除されたブランチをgitから復元できます。

コミットIDを見つける:git reflogを使用してブランチを検索する

過去30日以内にローカルgitリポジトリにブランチがあった場合、次を使用して reflogで検索 できる場合があります。

git reflog

Reflogでブランチ名を検索し、HEAD{x}ポイントまたはコミットID。

Reflog HEADポイントからブランチを再作成します:

git checkout -b branch_name HEAD@{27}

コミットIDからブランチを再作成します。

コミットIDをチェックアウトして、そのコミットポイントからブランチを作成できます。

git checkout -b branch_name <commit id>
52
Highway of Life

GitHubのサポートを依頼して、リモートリポジトリのreflogを調べるようにすることができます( たとえば、このスレッドのように )。
これが削​​除から十分に近い場合(デフォルトで30日未満)、reflogにはまだブランチによって参照されなくなったコミットが含まれています。
これらのコミットの1つにブランチを作成すると、再びアクセスできるようになります。

Reflogの詳細については、「 一体何がreflogであり、なぜそれがそれほど重要なのか? 」を参照してください。


更新:レポジトリの所有者は、GitHub EVents APIをクエリすることもできます:
GitHubはコミットIDを覚えていますか? 」を参照してください。

10
VonC

ブランチが非常に長い時間(私の場合は1年)削除されたが、そのブランチのプルリクエストを開いていた場合、プルリクエスト履歴で検索することで、ブランチを復活させることができます。

そのブランチのプルリクエストが見つかったら、ブランチを復元できます。関連するコミット情報などもプルリクエストから入手できます。

3
Gordon Bean

git reflogHEADの履歴を表示します。削除したブランチの名前がfooである場合、その出力には48534f5 HEAD@{0}: checkout: moving from master to foo48534f5 HEAD@{1}: merge foo: Fast-forwardなどの行が表示されます。 git reflogの出力を検索して、fooが指し示した最新のコミットでなければならないコミットを見つけることができます。

Fooが削除されたときに「foo」reflogファイル自体も削除されますが、HEADのreflogが異なるため、まだ存在していることを理解してください。

1
Alexander Bird

これを見てくださいpython githubイベントのスクリプト。 https://github.com/jimzucker/githubutils/blob/master/githubreflog.py

イベントをプルして読み取り可能にするために作成しました。それをgrepにパイプして、興味のあるブランチを探します。十分な履歴がある場合は、問題のブランチの削除イベントが表示され、次の行になります最後のプッシュイベントであり、それがあなたが興味を持っているshaです。

1
Jim Zucker