77

くだらない!約 1 週間前、リポジトリをクリーンアップしようとしていくつかのコミットをリベースしていましたが、実際には完了していないようです。今日、1 週間といくつかのコミットの後で、今日からいくつかのコミットを並べ替えるためにリベースに行きました。

念のため、それは私のレポをコピーするための合図だったはずです。しかし、私はそうしませんでした...代わりにgit rebase --abort、その時にぴったりの音で走りました。まあ、それは正しくありませんでした。1 週間前からのリベースを中止し、マスターの HEAD を古いものにリセットしました。ダミー!

かなり最近の他のいくつかのブランチがあり、リモートに数回プッシュしましたが、最新の変更は永遠に失われているようです. 変更を回復する方法があるかどうかを知るための適切なレベルの git-fu を持っていません。

私はめちゃくちゃですか?

編集- うわー!みんなありがとう!git reflogすごい!私は完全に回復しました...教訓が得られました。Tchalvak の回答が最初に投稿されたとして承認されたことを示します。

4

2 に答える 2

127

確認してくださいgit reflog。ほとんどの場合、これらのコミット ハッシュを参照として使用して時間をさかのぼることができます。

また、何が機能するかを確認するための予備テストを行う場所として、git repo ディレクトリを別の場所に物理的にコピーします。そうすれば、追跡されていないファイルを失ったり、元に戻せない状態になったりすることなく、必要なものをいじることができますから。

于 2010-04-22T19:06:00.410 に答える
77

最新のコミット (rebase --abort 後に消えた) の SHA1 を . で取得できるはずですgit reflog

その後、現在のブランチをそれらのSHA1にリセットできます

# Suppose the old commit was HEAD@{2} in the ref log
git reset --hard HEAD@{2}

「元に戻すgit reset --hard HEAD~1」に少し似ています。

回復の他の例については、「Git を使用して失われたコミットを回復するための図解ガイド」も参照してください。

于 2010-04-22T19:07:18.087 に答える