Devsway

日々の記録とか記憶とか。


filter-branch


主な目的

ブランチを書き換えます。

…あんま「フィルター」って感じじゃないよな。

「書き換え」とかそういう意味の言葉にしてほしいな・・・


説明


に記載されているブランチを書き換えて、各リビジョンにカスタムフィルターを適用することにより、Gitのリビジョン履歴を書き換えることができます。これらのフィルターは、各ツリー(たとえば、ファイルの削除またはすべてのファイルに対するperl書き換えの実行)または各コミットに関する情報を変更できます。そうしないと、すべての情報(元のコミット時間またはマージ情報を含む)が保持されます。


コマンドは、コマンドラインで言及された正の参照のみを書き換えます(たとえば、a..bを渡すと、bのみが書き換えられます)。フィルターを指定しない場合、コミットは変更なしで再コミットされますが、通常は効果がありません。それでも、これは将来、いくつかのGitバグなどを補うのに役立つ可能性があるため、このような使用は許可されています。


注:このコマンドは、.git / info / graftsファイルとrefs / replace /名前空間のrefを優先します。グラフトまたは置換refが定義されている場合、このコマンドを実行するとそれらが永続的になります。


警告!書き換えられた履歴は、すべてのオブジェクトに対して異なるオブジェクト名を持ち、元のブランチに収束しません。書き換えたブランチを元のブランチの上に簡単にプッシュして配布することはできません。完全な意味がわからない場合は、このコマンドを使用しないでください。単純な単一のコミットで問題を解決できる場合は、使用を避けてください。 (公開された履歴の書き換えの詳細については、git-rebase [1]の「UPSTREAM REBASEからの回復」セクションを参照してください。)


書き換えられたバージョンが正しいことを常に確認してください。書き換えられたものと異なる場合、元の参照は名前空間refs / original /に保存されます。


この操作は非常にI / Oの負荷が高いため、一時ディレクトリを-dオプションでオフディスクにリダイレクトすることをお勧めします。 tmpfsで。報告によると、高速化は非常に顕著です。


フィルター

フィルターは、以下にリストされている順序で適用されます。 引数は、シェルコンテキストで常にevalコマンドを使用して評価されます(技術的な理由により、コミットフィルターの顕著な例外があります)。その前に、$ GIT_COMMIT環境変数は、書き換えられるコミットのIDを含むように設定されます。また、GIT_AUTHOR_NAME、GIT_AUTHOR_EMAIL、GIT_AUTHOR_DATE、GIT_COMMITTER_NAME、GIT_COMMITTER_EMAIL、およびGIT_COMMITTER_DATEは、現在のコミットから取得され、環境にエクスポートされます。これは、git-commit-tree [1]後に作成された置換コミットフィルターが実行されました。


の評価でゼロ以外の終了ステータスが返された場合、操作全体が中止されます。


「元の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




カテゴリー

オレオレIT用語辞典