Github にプッシュされるすべてのメッセージで、特定の文字列を grep して変更したいと考えています。出来ますか?どのように?最後のメッセージバイを変更する方法は知ってgit commit --amend
いますが、すべてのコミットのすべてのメッセージを変更したいです。
1 に答える
そのオプションで使用git-filter-branch
し--msg-filter
ます。例:
git filter-branch -f --msg-filter 'sed "s/git-svn.*$//g"' -- --all
これにより、リポジトリ内のほとんどすべてのコミット ID が変更されるため、プロジェクトで作業するすべての人が新しいクローンを作成する必要があることに注意してください。
詳細については、次のブログ投稿を参照してください。
http://mm0hai.net/blog/2011/03/10/rewriting-git-commit-message-history.html
上記のコマンドはローカル コピーに対してのみ実行されることに注意してください。更新を反映するには、GitHub にプッシュする必要があります...
ステップバイステップ
最初にフラグを使用して、リポジトリの新しいコピーを複製します。--mirror
$ git clone --mirror git://example.com/my-repo.git
これはベア リポジトリです。つまり、通常のファイルは表示されませんが、リポジトリの Git データベースの完全なコピーであるため、この時点でバックアップを作成して、何も失わないようにする必要があります。 .
これで、実行git-filter-branch
してコミット メッセージを修正できます。
git filter-branch -f --msg-filter 'sed "s/git-svn.*$//g"' -- --all
リポジトリの更新された状態に満足したら、それをプッシュして戻します (クローン コマンドで--mirror
フラグを使用したため、このプッシュによってリモート サーバー上のすべての参照が更新されることに注意してください)。
$ git push
この時点で、自分自身を含むすべてのユーザーがレポの古いコピーを破棄し、新しくてきれいなデータの新しいクローンを作成する準備が整いました。
... BFG は、多くのgit-filter-branch
場合、Git の履歴をクリーンアップするよりもはるかに優れていることを指摘せざるを得ませんが、この場合git-filter-branch
は、ニーズにぴったりのように思えます。