0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

誤ったコミット情報を修正する: Git LogのAuthorとCommitter変更ガイド

Last updated at Posted at 2023-07-24

どうもこんにちはたくびー(@takubii)です。
皆さんはGit Logを詳しく見たことはありますか?
普段はVisual Studio Codeのソース管理でしか見ない、あるいは拡張機能を使って確認するだけだったりしませんか?私自身、そうでした。
Githubなどでコミッターの名前を見てみると、自分の意図していない名前でコミットしていたりということがあります。
今回はそういった場合に、どう変更していくのか紹介したいと思います。

Git Logの確認

まずはGitのログを確認しましょう。

terminal
git log --pretty=fuller

git logでもログの確認はできますが、--pretty=fullerオプションを使用することで、Author、Committer情報、さらにその時間まで表示してくれます。
今回はCommitterだけでなく、Authorも自分が意図した名前なのか確認してみましょう。

terminal
commit [コミットハッシュ]
Author:     [Author Name] [<Author email>]
AuthorDate: Sat Jun 10 00:44:47 2023 +0900
Commit:     [Committer Name] [<Committer email>]
CommitDate: Sat Jun 10 00:44:47 2023 +0900

    [コミットコメント]

コマンドを打って確認すると、上記のようなログが表示されていると思います。
これでコミット情報がより詳しく確認できました。

Author、Committerの変更

AuthorCommitterがもし公開したくない名前やメールアドレスであった場合、これを変更したいと思うでしょう。
以下のスクリプトを実行することによって、全てのコミットログのAuthorCommitterを一括で変更することができます。

terminal
git filter-branch --env-filter '
OLD_EMAIL="your-old-email@example.com"
CORRECT_NAME="Your Correct Name"
CORRECT_EMAIL="your-correct-email@example.com"
if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
then
  export GIT_COMMITTER_NAME="$CORRECT_NAME"
  export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]
then
  export GIT_AUTHOR_NAME="$CORRECT_NAME"
  export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
fi
' --tag-name-filter cat -- --branches --tags

こちらのスクリプトのOLD_EMAILを変更したい対象のemail(現在設定されているemail等)、CORRECT_NAMECORRECT_EMAILを変更後の値にすることで全コミットに影響を与えることができます。
私の場合、AuthorCommitterはどちらも同一でしたが、異なる値を設定したい場合は、GIT_AUTHOR_NAMEGIT_AUTHOR_EMAILに違う値を入れれば変えることができます。
※こちらの処理はローカルのGit Logを書き換えるスクリプトなので、念の為フォルダごとコピーし、バックアップをとっておいてください。

スクリプト実行後にもう一度Git Logを確認し、問題なかったら以下のコマンドでリモートに反映させてください。
通常のプッシュでは変更内容を反映できないので、--forceオプションをつけて強制実行しています。

terminal
git push --force --tags origin 'refs/heads/*'

最後に忘れずにローカルのuser.nameuser.emailを変更しておきましょう。

terminal
git config --local user.name "変更したい名前"
git config --local user.email "変更したいメール"

変更後にしっかりと変更されているか確認するには以下のコマンドを入力し、user.nameuser.emailの値を見てください。

terminal
git config --local -l

コミット時間の変更

さらに、Git Logの詳細を見ていくとコミットの時間も確認できると思います。
実はコミット時間も自由に変えることができます。
以下のスクリプトはコミットハッシュを指定してコミット時間は変更するものです。
ただし、Author、Committerの変更の場合と異なり一度に一つの変更しかできません。これはコミット時間を変更するたびにハッシュが変更されるためです。

terminal
git filter-branch -f --env-filter \
  'if [ $GIT_COMMIT = コミットハッシュ ]
    then
      export GIT_AUTHOR_DATE="新しい日付と時間"
      export GIT_COMMITTER_DATE="新しい日付と時間"
    fi'

こちらのスクリプト実行後もAuthor、Committer変更時と同じようにリモートリポジトリに反映させましょう。

terminal
git push --force --tags origin 'refs/heads/*'

終わりに

Git Logの少し変わった操作方法について解説してみました。
あまり、使う機会はないかもしれないですが、プライベートで開発していた際にGit Configが意図していないものになってしまった場合に対応が可能になります。プライバシーに気を使っている方には有効かなと思います。
それでは、今回はここまでとしたいと思います。ここまで読んでいただきありがとうございます。
また機会があればお会いしましょう。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?