Table of Contents

Change git author and email in history retroactively

Before executing the script, set your user.name and user.email git config parameter properly!

This changes SHA1s, so take care when using it on a branch that has already been pushed.

First stash any unstaged changes

git stash

Apply fix

Set variables on lines 2,3 and 4 below and run:

  1. git filter-branch --env-filter '
  2. OLD_EMAIL="your-old-email@example.com"
  3. CORRECT_NAME="Your Correct Name"
  4. CORRECT_EMAIL="your-correct-email@example.com"
  5. if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
  6. then
  7. export GIT_COMMITTER_NAME="$CORRECT_NAME"
  8. export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
  9. fi
  10. if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]
  11. then
  12. export GIT_AUTHOR_NAME="$CORRECT_NAME"
  13. export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
  14. fi
  15. ' --tag-name-filter cat -- --branches --tags

Delete duplicate backup history

git update-ref -d refs/original/refs/heads/master
rm -rf .git/refs/original/

Verify the new rewritten log via

git log --pretty=format:"[%h] %cd - Committer: %cn (%ce), Author: %an (%ae)"

Tested on

See also

References