タイトルのシチュエーションにおける方法としてgit-filter-branchを使う方法がよく紹介されていますが、git-filter-branchを使用するとgit-filter-repoを代わりに使用するよう警告が出るようになりました。
そこでgit-filter-repoを使う方法を紹介しようと思います。
前提
- git >= 2.22.0, 一部の機能は git >= 2.24.0
- python3 >= 3.5
参照: https://github.com/newren/git-filter-repo#prerequisites
インストール
git-filter-branchはGitに組み込まれた機能ではないので、インストールが必要です。
pipからインストールする場合:
$ pip3 install git-filter-repo
パッケージマネージャからインストールする場合:
$ PACKAGE_TOOL install git-filter-repo
対応しているパッケージマネージャのリスト: https://github.com/newren/git-filter-repo/blob/master/INSTALL.md#installation-via-package-manager
コマンド
まずメールアドレスをマッピングするためのテキストファイルを以下のような形式で作成します。
new_name <new@email.com> <old@email.com>
そしてリポジトリのディレクトリで以下のコマンドを実行します。
git filter-repo --mailmap mailmap
mailmap
は上で作成したテキストファイルのパスに置き換えてください。
多くの場合では強制的に修正するために-f
をつける必要があるかと思います。
git filter-repo -f --mailmap mailmap