2

Github にプッシュされるすべてのメッセージで、特定の文字列を grep して変更したいと考えています。出来ますか?どのように?最後のメッセージバイを変更する方法は知ってgit commit --amendいますが、すべてのコミットのすべてのメッセージを変更したいです。

4

1 に答える 1

5

そのオプションで使用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は、ニーズにぴったりのように思えます。

于 2013-04-08T08:09:25.040 に答える