git revert -n <hash of bulk commit>
作業ツリーの一括コミットの変更を元に戻そうとします。git reset HEAD -- <paths to keep changes in>
完了したら、--patch
(保持する変更をインタラクティブに選択するために)を使用して実行できます。次に、他のコミットと同じようにコミットします。
リポジトリはプライベート/プッシュされていませんか?もしそうなら、私はこのようなことについてはお勧めしませんが、もう1つの選択肢があります。 git rebase -i <hash of commit before bulk>
。e
またはで始まる最初の行(一括コミットの最初の行が必要)を編集しedit
ます。
その時点で、git reset <hash of commit before bulk> -- <paths to revert>
続いてを使用git commit --amend
して一括コミットを修正し、一部のファイルの変更を除外できます。次にgit rebase --continue
、調整されたコミットに加えて、残りのすべての履歴を書き換えます。競合を解決して、ファイルの元に戻されたビットに触れた場合は、再度続行する必要がある場合があります。その後、あなたの歴史は、あなたが悪い変更をまったく加えなかったように読まれます。プライベートプロジェクトの場合は良いことかもしれませんが、リベース後、書き換え元の中間状態に戻るのがかなり難しくなることに注意してください。しばらくの間はそれを行うことができますgit reflog
が、最終的には古いバージョンのコミットが期限切れになり、リポジトリから削除されます。
いずれの場合も、git diff --name-only
変更を元に戻したい/したくないパスをリストしたテキストファイルを編集してから、$(< badfiles)
パスのリストの使用について説明した場所のようにシェル構造を使用することをお勧めします。コマンドラインでそのファイルをプルインします。1行に1つ、またはスペースで区切ると、そのような場合に問題なく機能します。ああ、パスにスペースがある場合は、ファイル内のパスを引用符で囲む必要があります。