filter-branch
主な目的
ブランチを書き換えます。
…あんま「フィルター」って感じじゃないよな。
「書き換え」とかそういう意味の言葉にしてほしいな・・・
説明
コマンドは、コマンドラインで言及された正の参照のみを書き換えます(たとえば、a..bを渡すと、bのみが書き換えられます)。フィルターを指定しない場合、コミットは変更なしで再コミットされますが、通常は効果がありません。それでも、これは将来、いくつかのGitバグなどを補うのに役立つ可能性があるため、このような使用は許可されています。
注:このコマンドは、.git / info / graftsファイルとrefs / replace /名前空間のrefを優先します。グラフトまたは置換refが定義されている場合、このコマンドを実行するとそれらが永続的になります。
警告!書き換えられた履歴は、すべてのオブジェクトに対して異なるオブジェクト名を持ち、元のブランチに収束しません。書き換えたブランチを元のブランチの上に簡単にプッシュして配布することはできません。完全な意味がわからない場合は、このコマンドを使用しないでください。単純な単一のコミットで問題を解決できる場合は、使用を避けてください。 (公開された履歴の書き換えの詳細については、git-rebase [1]の「UPSTREAM REBASEからの回復」セクションを参照してください。)
書き換えられたバージョンが正しいことを常に確認してください。書き換えられたものと異なる場合、元の参照は名前空間refs / original /に保存されます。
この操作は非常にI / Oの負荷が高いため、一時ディレクトリを-dオプションでオフディスクにリダイレクトすることをお勧めします。 tmpfsで。報告によると、高速化は非常に顕著です。
フィルター
フィルターは、以下にリストされている順序で適用されます。
「元のsha1 id」引数を取り、コミットがすでに書き換えられている場合は「書き換えられたsha1 id」を出力し、そうでない場合は「元のsha1 id」を出力するマップ関数が使用可能です。コミットフィルターが複数のコミットを発行した場合、マップ関数は複数のIDを別々の行に返すことができます。
オプション
tree-filter
これは、ツリーとその内容を書き換えるためのフィルターです。 引数は、チェックアウトされたツリーのルートに設定された作業ディレクトリを使用してシェルで評価されます。 その後、新しいツリーがそのまま使用されます(新しいファイルは自動的に追加され、消えたファイルは自動的に削除されます。.gitignoreファイルも他の無視ルールにも効果はありません!)。
env-filter
このフィルターは、コミットの環境を変更する必要がある場合にのみ使用できます。
具体的には、作成者/コミッター名/電子メール/時間の環境変数を書き換えることができます
(詳細については、git-commit-tree [1]を参照)。
force
-f
でも代用可能
使用例
すべてのコミットから特定のファイルを削除するとします。
git filter-branch --tree-filter 'rm filename' HEAD
参考
https://git-scm.com/docs/git-filter-branch
最近のコメント