1. ホーム
  2. ギット

[解決済み】Gitで複数のコミットの著者名やコミッター名、Eメールを変更する方法は?

2022-03-18 01:36:41

質問

学校のコンピュータで簡単なスクリプトを書いて、その変更をGitにコミットしていました(自宅のコンピュータからクローンしたペンドライブ内のレポにコミットしていました)。何度かコミットした後、私は自分が root 権限でコミットしていることに気づきました。

これらのコミットの著者を私の名前に変更する方法はありますか?

解決方法は?

<ブロッククオート

この回答では git-filter-branch に対して ドキュメント は、このような警告を出すようになりました。

git filter-branch にはたくさんの落とし穴があり、意図した歴史の書き換えを明らかにしないままにしてしまうことがあります (そして、このようなひどいパフォーマンスのため、そのような問題を調査する時間がほとんどとれません)。これらの安全性とパフォーマンスの問題は後方互換性をもって修正することができないため、その使用は推奨されません。以下のような別の履歴フィルタリングツールを使用してください。 git フィルターレポ . それでもgit filter-branchを使用する必要がある場合は、次の項目をよくお読みください。 安全性 (そして パフォーマンス を読んで、フィルターブランチの地雷について学び、そこに書かれている危険性を可能な限り回避するようにしましょう。

作者(またはコミッター)を変更すると、すべての履歴を書き直す必要があります。 もしあなたがそれでいいのなら、そしてその価値があると思うなら、以下をチェックしてみてください。 git フィルターブランチ . manページにはいくつかの例が掲載されていますので、参考にしてください。 また、環境変数を使って、作者名、コミッター名、日付などを変更できることにも注意してください。-- の "環境変数" のセクションを参照してください。 ギットマニュアルページ .

具体的には、間違った著者名と電子メールをすべて修正することができます。 すべてのブランチとタグについて をこのコマンドで実行します(ソースはこちら)。 GitHubヘルプ ):

#!/bin/sh

git filter-branch --env-filter '
OLD_EMAIL="[email protected]"
CORRECT_NAME="Your Correct Name"
CORRECT_EMAIL="[email protected]"
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

代替履歴フィルタリングツールを使用する場合 git filter-repo を使用する場合、まずそれをインストールし git-mailmap の書式にしたがって ギットメールマップ .

Proper Name <[email protected]> Commit Name <[email protected]>

そして、作成したメールマップを使ってfilter-repoを実行します。

git filter-repo --mailmap git-mailmap