web-dev-qa-db-ja.com

古いgit rebaseを中止し、リベースが開始してからコミットを失った

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

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

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

私はねじ込まれていますか?

[〜#〜] edit [〜#〜]-すごい!みんなありがとう! git reflog すごい!私は完全に回復しました...教訓を学びました。 Tchalvakの回答をマークすると、最初に投稿したことが承認されました。

67
Dan Breen

小切手 git reflog。ほとんどすべての場合、これらのコミットハッシュを参照として使用して、時間を遡ることができます。

私はまた、何が機能するかを確認するための予備テストを行う場所としてgit repoディレクトリを物理的に他の場所にコピーします。こうすることで、追跡されていないファイルを失うことなく、または物事をあなたが望む状態にすることなく、あなたが望むものをいじることができますcan 'tから戻ってきます。

101
Kzqai

git reflog を使用して、最新のコミット(リベース--abort後に消えた)のSHA1を取得できるはずです。

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

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

Undoing a git reset --hard HEAD~1 」のようなものです。

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

65
VonC