マージ地獄を引き起こしている変更を加えたリポジトリがあり、それが存在しなかったふりをしたいと思います。git-p4 を介して更新されたリポジトリの上に既存のリポジトリをスプライシングすることを含む長くて複雑な話ですが、結論としては、git に特定の変更が存在しなかったふりをさせたいということです。
Mercurial の場合、問題を解決できると確信してhg strip
いますが、Git でそのようなコマンドを見つけることができません。
ご提案いただきありがとうございます。
実行する必要があるコマンドは複数あります。最初は、他の人が言及したように、git reset
. 削除したい変更セットの直前にある変更セットを見つけて、
git reset --hard <changeset>
これにより、現在のブランチ ヘッド (およびインデックス) がその変更セットを指すように変更されますが、「悪い」変更セットはまだ存在しています。プッシュしても含まれませんが、ローカル リポジトリのクローンを作成すると含まれ、引き続き log および checkout コマンドで参照できます。
それへの他の参照 (たとえば、後続のコミット、タグなど) がないと仮定すると、次のようにクリーンアップできます。
git gc --prune=now
http://help.github.com/remove-sensitive-data/のおかげでこのコマンドを見つけました。これには、(と同様にhg strip
)その「悪い」変更セットをリモートの場所にプッシュした場合、削除できないことも記載されていますこれは通常の git コマンドで実行できますが、サーバー上のリポジトリを削除して再作成し、キャッシュされたページをクリーンアップするために追加の手順を実行する必要があります。
ラースクが言ったように、git reset --hard
あなたが望んでいた歴史に戻るのを助けることができます:
git log
。git reset --hard sha
戻るために実行します。