土曜日, 2月 23, 2019

コミットログ(コミッター、コミッターのメールアドレス)を書き換える方法

2021年2月3日

現在は、git-filter-branch よりも git-filter-repo を使うことが推奨されています。

こちらの記事を参考にして git-filter-repo を使うようにしてみて下さい。

コミットログ(コミッター、コミッターのメールアドレス)を書き換える方法【改】



超久しぶりのブログ更新。

将来の自分のためにメモを残しておこうと思う。

ローカルで git 管理しているレポジトリを github に上げたら、レポジトリを作成したアカウントとは異なるアカウントでコミットしたことになっていた。

手順としては、user1 でレポジトリを作成して、その user1 のレポジトリにローカルのレポジトリを push したのに、何故か user2 のコミット履歴が表示された。

原因は、なんのことはない。ローカルのレポジトリには user2 でコミットしてた。。。😅

~/.gitconfig には以下のように設定されていたので、

[user]
  email = user2@example.com
  name = user2

ローカルのレポジトリのホームディレクトリにて、以下のコマンドを実行。

$ git config user.name "user1"
$ git config user.email "user1@example.com"

--global オプションをつけると ~/.gitconfig の設定が変更され、user.name、user.email の設定がされていないレポジトリは、すべて user1 のコミットになってしまう。つまり、グローバルに設定がされてしまう。😆

今回、github に push したレポジトリだけに限定したかったので、--global オプションは付けなかった。

これで、このコマンドを実行した移行のコミットについては、user1 のコミットとしてログに保存される。

しかし、これだと過去のコミットの user.name や user.email はそのままなので、それを修正する必要がある。

なので、こちらのページを参考に、修正をした。

How can I change the author (name / email) of a commit?

$ git filter-branch --env-filter '
WRONG_EMAIL="user2@example.com"
NEW_NAME="user1"
NEW_EMAIL="user1@example.com"

if [ "$GIT_COMMITTER_EMAIL" = "$WRONG_EMAIL" ]
then
    export GIT_COMMITTER_NAME="$NEW_NAME"
    export GIT_COMMITTER_EMAIL="$NEW_EMAIL"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$WRONG_EMAIL" ]
then
    export GIT_AUTHOR_NAME="$NEW_NAME"
    export GIT_AUTHOR_EMAIL="$NEW_EMAIL"
fi
' --tag-name-filter cat -- --branches --tags

このコマンドを実行すると、過去のコミットすべてを書き換えるので、注意して実行する。

0 件のコメント:

コメントを投稿