Git での履歴記録におけるコミット情報

スクリプトは、Git履歴のコミットメッセージの作成者情報をまとめて変更するために使用され、git filter-branchを使用してGit履歴を書き換えます。

ご提供いただいたスクリプトは、Gitリポジトリの履歴コミットにおける作成者情報を一括で修正するものであり、全体的な考え方は正しいですが、git filter-branch--env-filter で配列(例:OLD_EMAILS=("..."))を使用すると、一部のシェル環境(例:/bin/sh)では互換性の問題が発生する可能性があります。これは、配列構文がサポートされていないためです。 互換性を高めるために、配列をスペースで区切られた文字列に置き換え、forループを使用して各古いメールアドレスを反復処理することをお勧めします。以下は修正後のスクリプトの例です。

#!/bin/sh

git filter-branch --env-filter '
OLD_EMAILS="TianlongXiang51@gmail.com nick@qq.com tianlongxiang51@gmail.com"
CORRECT_NAME="tianlong.xiang"
CORRECT_EMAIL="tianlong.xiang@foxmail.com"

for OLD_EMAIL in $OLD_EMAILS
do
    if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
    then
        export GIT_AUTHOR_NAME="$CORRECT_NAME"
        export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
    fi
    if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]
    then
        export GIT_COMMITTER_NAME="$CORRECT_NAME"
        export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
    fi
done
' --tag-name-filter cat -- --branches --tags

注意点:

  • このスクリプトを実行する前に、リポジトリのバックアップを作成することを強くお勧めします。これにより、予期しない問題が発生した場合に備えることができます。
  • この操作はGit履歴を書き換えており、コミット作成者の情報を変更するため、コミットハッシュが変更される可能性があります。
  • 既に変更をリモートリポジトリにプッシュしている場合は、強制プッシュを実行する必要があります。 強制プッシュには注意し、特に複数人での共同プロジェクトでは、他のメンバーへの影響がないように慎重に行ってください。

リポジトリ内のすべてのユニークな作成者メールアドレスの統計

git log --format='%an <%ae>' | sort -u
Licensed under CC BY-NC-SA 4.0
最終更新 2025年06月02日 20:54
金融ITプログラマーのいじくり回しと日常のつぶやき
Hugo で構築されています。
テーマ StackJimmy によって設計されています。