web-dev-qa-db-ja.com

古いバージョンで上書きされたgitリポジトリを回復する

tar xの代わりに誤ってtar cを実行し、gitリポジトリを数日前のバージョンで上書きしました。これにより、.git内のオブジェクトを含め、新しく作成したファイルはすべてそのままになります。どうすれば可能な限り回復できますか?

2
sourcejedi

万が一に備えて、最初に混乱全体のコピーを作成してください。

git fsckぶら下がっているオブジェクトとコミットを表示します。最新のぶら下がりコミットを見つけます。すべてのコミットハッシュをgitkにフィードしましたが、一番上に最も「最近の」ハッシュが表示されています。対処するコミットが数個しかないだけでなく、回復するブランチも1つしかありませんでした。これは、複数のヘッドがある場合はより複雑になります。

次にgit stash現在コミットされていない変更を検査のために隠しておきます。

その後、私はgit reset --hard上記で決定されたコミットハッシュに。

git stash popもかなりきれいにマージされました。欲しいものはほぼすべて戻ってきたと思います。

2
sourcejedi