メインコンテンツへスキップ

git-filter-repoで過去コミットのユーザを変更した

·595 文字·2 分
git
称徳寺 涼雨
著者
称徳寺 涼雨
プリズムスタァ

あるあるだと思うのですが、プライベート端末でさくっと作っていたものを会社側のリポジトリに持っていくことになりました。
とはいえGit管理していたので過去のコミットがユーザ名/メールアドレスがプライベートのものになっていた……のでこれを変更したい。

git filter-branch -f --env-filter \
    "GIT_AUTHOR_NAME='new'; \
    GIT_AUTHOR_EMAIL='[email protected]'; \
    GIT_COMMITTER_NAME='new'; \
    GIT_COMMITTER_EMAIL='[email protected]';" \
HEAD

いつも使ってるコマンドだったのですが、なにか警告が出ていた。

WARNING: git-filter-branch has a glut of gotchas generating mangled history
	 rewrites.  Hit Ctrl-C before proceeding to abort, then use an
	 alternative filtering tool such as 'git filter-repo'
	 (https://github.com/newren/git-filter-repo/) instead.  See the
	 filter-branch manual page for more details; to squelch this warning,
	 set FILTER_BRANCH_SQUELCH_WARNING=1.

なんですかこれってなりましたが、どうやら git-filter-repo を使って欲しいらしい。
Macでhomebrewを使っているので下記コマンドでインストール。

$ brew install git-filter-repo

プロジェクト直下に new.mailmap ファイルを作成して中身を下記のように記載。

先程作成したファイルをオプションに加え、filter-repoを実行してみる。

$ git filter-repo --mailmap new.mailmap
Aborting: Refusing to destructively overwrite repo history since
this does not look like a fresh clone.
  (expected at most one entry in the reflog for HEAD)
Please operate on a fresh clone instead.  If you want to proceed
anyway, use --force.

怒られたのでforceしておく。

$ git filter-repo -f --mailmap new.mailmap

Parsed 7 commits
New history written in 0.06 seconds; now repacking/cleaning...
Repacking your repo and cleaning out old unneeded objects

(なんかいろいろ出るので略...)

Completely finished after 0.34 seconds.

無事終わったのでコミットを確認したら無事ユーザ名/メールアドレスが変更されていました。
次から同じようなシーンがあったらfilter-repoを使おうと思う。


参考にしたサイト