どうもこんにちはたくびー(@takubii)です。
皆さんはGit Logを詳しく見たことはありますか?
普段はVisual Studio Codeのソース管理でしか見ない、あるいは拡張機能を使って確認するだけだったりしませんか?私自身、そうでした。
Githubなどでコミッターの名前を見てみると、自分の意図していない名前でコミットしていたりということがあります。
今回はそういった場合に、どう変更していくのか紹介したいと思います。
Git Logの確認
まずはGitのログを確認しましょう。
git log --pretty=fuller
git logでもログの確認はできますが、--pretty=fullerオプションを使用することで、Author、Committer情報、さらにその時間まで表示してくれます。
今回はCommitterだけでなく、Authorも自分が意図した名前なのか確認してみましょう。
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の変更
Author、Committerがもし公開したくない名前やメールアドレスであった場合、これを変更したいと思うでしょう。
以下のスクリプトを実行することによって、全てのコミットログのAuthor、Committerを一括で変更することができます。
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_NAME、CORRECT_EMAILを変更後の値にすることで全コミットに影響を与えることができます。
私の場合、Author、Committerはどちらも同一でしたが、異なる値を設定したい場合は、GIT_AUTHOR_NAME、GIT_AUTHOR_EMAILに違う値を入れれば変えることができます。
※こちらの処理はローカルのGit Logを書き換えるスクリプトなので、念の為フォルダごとコピーし、バックアップをとっておいてください。
スクリプト実行後にもう一度Git Logを確認し、問題なかったら以下のコマンドでリモートに反映させてください。
通常のプッシュでは変更内容を反映できないので、--forceオプションをつけて強制実行しています。
git push --force --tags origin 'refs/heads/*'
最後に忘れずにローカルのuser.nameとuser.emailを変更しておきましょう。
git config --local user.name "変更したい名前"
git config --local user.email "変更したいメール"
変更後にしっかりと変更されているか確認するには以下のコマンドを入力し、user.nameとuser.emailの値を見てください。
git config --local -l
コミット時間の変更
さらに、Git Logの詳細を見ていくとコミットの時間も確認できると思います。
実はコミット時間も自由に変えることができます。
以下のスクリプトはコミットハッシュを指定してコミット時間は変更するものです。
ただし、Author、Committerの変更の場合と異なり一度に一つの変更しかできません。これはコミット時間を変更するたびにハッシュが変更されるためです。
git filter-branch -f --env-filter \
'if [ $GIT_COMMIT = コミットハッシュ ]
then
export GIT_AUTHOR_DATE="新しい日付と時間"
export GIT_COMMITTER_DATE="新しい日付と時間"
fi'
こちらのスクリプト実行後もAuthor、Committer変更時と同じようにリモートリポジトリに反映させましょう。
git push --force --tags origin 'refs/heads/*'
終わりに
Git Logの少し変わった操作方法について解説してみました。
あまり、使う機会はないかもしれないですが、プライベートで開発していた際にGit Configが意図していないものになってしまった場合に対応が可能になります。プライバシーに気を使っている方には有効かなと思います。
それでは、今回はここまでとしたいと思います。ここまで読んでいただきありがとうございます。
また機会があればお会いしましょう。