私は、いくつかのコミットにいくつかの大きな DDL ファイルを含めることができた他の数人と git リポジトリに取り組んでいます。過去のすべてのコミットからそれらを削除する方法はありますか? 残念ながら、特定のコミットはいたるところにあるため、特定のコミットをターゲットにするほど簡単ではありません。
マスターに最新のコミットを保持し、それより前のすべてを削除するだけで解決します。
私は、いくつかのコミットにいくつかの大きな DDL ファイルを含めることができた他の数人と git リポジトリに取り組んでいます。過去のすべてのコミットからそれらを削除する方法はありますか? 残念ながら、特定のコミットはいたるところにあるため、特定のコミットをターゲットにするほど簡単ではありません。
マスターに最新のコミットを保持し、それより前のすべてを削除するだけで解決します。
http://git-scm.com/book/en/Git-Tools-Rewriting-History
Nuclear オプション: filter-branch
スクリプト可能な方法で多数のコミットを書き換える必要がある場合に使用できる別の履歴書き換えオプションがあります。たとえば、電子メール アドレスをグローバルに変更したり、すべてのコミットからファイルを削除したりします。コマンドは filter-branch であり、履歴の膨大な部分を書き換えることができるため、プロジェクトがまだ公開されておらず、他の人が書き換えようとしているコミットに基づいて作業を行っていない限り、おそらく使用しないでください。 . ただし、非常に便利です。いくつかの一般的な使用法を学び、それができることのいくつかを理解できるようにします。
すべてのコミットからファイルを削除する
これはかなり一般的に発生します。誰かがうっかり git add . で巨大なバイナリ ファイルをコミットしてしまい、あなたはそれをどこからでも削除したいと考えています。おそらく、パスワードを含むファイルを誤ってコミットしてしまい、プロジェクトをオープンソースにしたいと思うでしょう。filter-branch は、おそらく履歴全体をスクラブするために使用したいツールです。履歴全体から passwords.txt という名前のファイルを削除するには、 --tree-filter オプションを使用してフィルター分岐します。
$ git filter-branch --tree-filter 'rm -f passwords.txt' HEAD
6b9b3cf04e7c5686a9cb838c3f36a8cb6a0fc2bd を書き換えます (21/21)
Ref 'refs/heads/master' が書き直されました
--tree-filter オプションは、プロジェクトをチェックアウトするたびに指定されたコマンドを実行し、結果を再コミットします。この場合、passwords.txt というファイルが存在するかどうかにかかわらず、すべてのスナップショットから削除します。誤ってコミットされたエディターのバックアップ ファイルをすべて削除したい場合は、git filter-branch --tree-filter "rm -f *~" HEAD などを実行できます。
Git がツリーとコミットを書き換えるのを見て、最後にブランチ ポインターを移動することができます。通常は、テスト ブランチでこれを行い、結果が本当に必要なものであると判断した後で、マスター ブランチをハード リセットすることをお勧めします。すべてのブランチで filter-branch を実行するには、コマンドに --all を渡します。
これは強力であると同時に危険なツールでもあることに注意してください。履歴の混乱を防ぐために、コミットをプッシュしないように同僚に伝えてください。