サーチ…


備考

Gitのreflogは、変更されるたびにHEAD(リポジトリの現在の状態の参照)の位置を記録します。一般に、破壊的である可能性のあるすべての操作にはHEADポインタの移動が含まれます(過去のものを含め、何らかの変更があった場合、チップコミットのハッシュが変更されるため、危険な操作が行われる前に常に元の状態に戻すことができます) reflogの中の正しい行を見つけてください。

しかし、refで参照されていないオブジェクトは通常〜30日以内にガベージコレクションされるため、reflogがいつも助けになるとは限りません。

悪いrebaseからのリカバリ

インタラクティブなリベースを開始したとします。

git rebase --interactive HEAD~20

間違って、あなたは失いたくないコミットを押しつぶしたり落としたりしましたが、リベースを完了しました。回復するには、 git reflog 、次のような出力が表示されることがあります。

aaaaaaa HEAD@{0} rebase -i (finish): returning to refs/head/master
bbbbbbb HEAD@{1} rebase -i (squash): Fix parse error
...
ccccccc HEAD@{n} rebase -i (start): checkout HEAD~20
ddddddd HEAD@{n+1} ...
...

この場合、最後のコミットddddddd (またはHEAD@{n+1} )は、あなたのプリrebaseブランチの先端です。したがって、そのコミット(およびすべての親コミット(偶発的に押しつぶされたり落とされたものを含む)を回復するには、次のようにします。

$ git checkout HEAD@{n+1}

その後、 git checkout -b [branch]を使ってそのコミットで新しいブランチを作成することができます。詳細は、「 分岐 」を参照してください。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow