How to change the author details for historical commits in a git repository

git

1 September, 2021



tl;dr git rebase -i --root -x "git commit --amend --author 'New Name <new-email@example.com>' -CHEAD"

Update git config

git config --global user.name "New Name"
git config --global user.email new-email@example.com

Amend commit history

git rebase -i --root -x "git commit --amend --author 'New Name <new-email@example.com>' -CHEAD"

Okay, we maybe didn't need to update the git config, but it's probably a good idea for the future anyway. We could also do this version with --reset-author instead of --author <author details>, but be aware that this will overwrite the commit timestamps to the current time:

git rebase -i --root -x "git commit --amend --reset-author -CHEAD"

The --root flag targets all commits in the repository's history. You can target specific commits with SHA keys, or replace it with HEAD~N where N is an integer describing the number of commits to go back to.

Push

git push --force

Or if you're just pushing to a new repo, you won't need to force, and can just, e.g., git push -u origin main.

Remote

Maybe you need to do this because you're changing your remote and want to change your email at the same time. You could keep your old remote and just rename it, but I prefer to just remove it entirely, e.g.,

git remote set-url origin path/to/git/repo.git

There's a lot more detail in the Stack Overflow posts in the references.

References



2 comments

涛叔 13 September, 2024

Your solution will lost the commit date 😢

Here is the solution that only modify user name and email

https://stackoverflow.com/a/2920001

heds.nz 13 September, 2024

Thanks for the message - yes, if you do the '--reset-author' version, you lose the timestamps (as I state in the post), but if you do the '--amend --author' version, the timestamps are maintained.

Leave a comment