Gitリポジトリで過去のコミットのコミッター(Commit)やオーサー(Author)を変更する - Git

Gitリポジトリで過去のコミットのコミッター(Commit)やオーサー(Author)を変更する手順を紹介します。

概要

Gitリポジトリにコミットやソースコードのプッシュをする場合のAuthorやCommitは開発環境に設定したユーザー名やメールアドレスが利用される場合があります。
コマンドの場合は、 このため通常利用しているマシンと別のマシンからソースコードのコミットやプッシュを実行した場合、通常利用しているユーザー名とは別のユーザー名でリポジトリに記録されてしまいます。
この記事では、過去のコミットのAuthorやCommitのユーザー名を変更する場合の手順を紹介します。

手順

コミットIDの確認

git logコマンドや git log --pretty=full コマンドを実行して、修正したいAuthorのコミットの一つ手前のIDを確認します。
git log コマンドの詳細はこちらの記事を参照してください。

rebase コマンドの実行

修正したいコミットの一つ手前のIDを取得できたらrebaseコマンドを実行します。以下のコマンドを実行します。
git rebase -i (修正したいコミットの一つ手前のID)
なお、一番最初のコミットを修正したい場合は次のコマンドになります。
git rebase -i --root

git rebase -i コマンドを実行します。

修正したいコミットを編集

git rebase コマンドを実行すると、エディタが起動します。



指定したコミットID以降のコミットが画面に表示されています。修正したいコミットの左側の pickedit に変更します。
変更後、保存してエディタを閉じます。

rebaseモードでの作業

エディタを閉じ、コマンドウィンドウに戻ります。


git commit --amend コマンドを実行します。書式は次の通りです。
git commit --amend --author="[ユーザー名]<[メールアドレス]>"


コマンドを実行するとテキストエディタが起動します。ほかにコメントなどを修正する必要があれば、修正して保存し、テキストエディタを終了します。


コミットユーザーとAuthorが違う場合は、Authorの項目が表示されます。 Authorの値は変更後の値に変わっています。ほかにコメントなどを修正する必要があれば、修正して保存し、テキストエディタを終了します。


変更ができたら、git log --pretty=full コマンドを実行して、Authorが変更されているか確認します。

Commitが希望のユーザー名になっていない場合

Author が正しい値に変更されていますが、Commit が希望のユーザー名に変更されていない場合、作業しているGitの環境のユーザー名が変更したいユーザー名に設定されていない可能性があります。
一度、rebaseを終了し、以下のコマンドを実行して作業環境のユーザー名とメールアドレスを設定します。

補足
rebaseを中止する場合は git rebase --abort コマンドを実行します。

以下のコマンドを実行します。
git config user.name "[設定するユーザー名]"
git config user.mail "[設定するメールアドレス]"


ローカルのGitのユーザー名とメールアドレスを設定後、再度リベース処理を実行します。

リベースの完了

git log --pretty=full コマンドを実行してAuthorやCommitのユーザー名が変更後のユーザーになっていることを確認します。


変更内容が正しいことを確認後、git rebase --continue コマンドを実行します。

履歴の少ないリポジトリであれば、Successfully rebased and updated refs/heads/master. のメッセージが表示され、リベース処理が完了します。
履歴の多いリポジトリの場合はコンフリクトが発生する場合があります。
バイナリファイルのコンフリクトが発生した場合は、git add . コマンドを実行し、その後、再度 git rebase --conitnue コマンドを実行します。
rebase処理を最後まで進めます。


メモ
rebase 処理が完全に終了すると、git rebase --continue コマンドを実行すると fatal: No rebase in progress? のメッセージが表示される状態になります。

変更のプッシュ

git push コマンドを実行します。


エラーが発生する場合は、git pull コマンドを実行し、リモートリポジトリとマージ後に、git push コマンドを実行します。






リポジトリに対してプッシュが成功しました。


なお、git pull コマンドを実行後に再度 git push コマンドを実行してエラーが発生する場合は、git push --force コマンドを実行します。
補足
git push --force コマンドを実行してリポジトリの内容をプッシュした場合、ほかの作業者はリポジトリの複製(クローン作成)からやり直す必要がありますので、実行前に リポジトリの作業者に再クローンの必要がある旨を連絡します。

変更の確認

リモートのリポジトリにアクセスして、履歴を確認します。コミットユーザーが変更されていることが確認できます。


以上の手順で、Gitリポジトリのコミットユーザー、Authorのユーザー名を変更できました。

著者
iPentec.com の代表。ハードウェア、サーバー投資、管理などを担当。
Office 365やデータベースの記事なども担当。
掲載日: 2021-04-24
iPentec all rights reserverd.