📜

【Git】 過去コミットのAuthorとCommitterを一括変更する【歴史改変】

2020/09/29に公開

プライベート用のツールを作成している時に「あ!社用パソコンでコミットしてる!AuthorとCommitterガガガガ」みたいなことありますよね!ね!🙄

そんな時に一括で「AuthorとCommitterを変更できる妙案はないかなぁ〜」と思いGoogle先生に意見お伺いしていたら...ありました...!

git filter-branch -f --env-filter "GIT_AUTHOR_NAME='{{USERNAME}}'; GIT_AUTHOR_EMAIL='{{sample@example.com}}'; GIT_COMMITTER_NAME='{{USERNAME}}'; GIT_COMMITTER_EMAIL='{{sample@example.com}}';" HEAD

{{USERNAME}}と{{sample@example.com}}部分を変更したい値にしてから実行すればOKです。
(変更したい環境変数と値を記述しています。)
実行後はpush(場合によってはforce push)を行えば歴史改変完了です。

歴史改変コマンド filter-branch

一応、コマンドの説明をば。
この、filter-branchというコマンドは全コミットを対象にして歴史改変が行える恐ろしいコマンドです。複数人が関与しているリポジトリなどでは、よほど特殊な状況でなければまず使うことはないと思うのですが、上手に付き合うことができれば非常に便利なコマンドでもあります。(黒魔法)

オプション

--env-filter

各コミットを実行した環境変数の変更を行うことができます。
今回の例で言えば「作成者」「コミッター」「メールアドレス」です。

-f/--force

みんな大好きフォースオプションです。(力こそパワー)
何があろうと書き換えるという強い意思の表れです。
refs/original/にバックアップがすでに存在すると、filter-branchの歴史改変が実行できないので、フォースオプションを利用もしくはバックアップの削除を行ってあげましょう。
今回はフォースオプションを利用しています。

共有リポジトリでは使わない方が無難

超便利なfilter-branchコマンドですが、全てのコミットの歴史を変える力があるので、やはり複数人が絡むリポジトリでは利用しない方が無難だと思います。

では良いGitライフを👋

Discussion