How to amend several commits in Git to change author How to amend several commits in Git to change author git git

How to amend several commits in Git to change author


Rebase/amend seems inefficient, when you have the power of filter-branch at your fingertips:

git filter-branch --env-filter 'if [ "$GIT_AUTHOR_EMAIL" = "incorrect@email" ]; then     GIT_AUTHOR_EMAIL=correct@email;     GIT_AUTHOR_NAME="Correct Name";     GIT_COMMITTER_EMAIL=$GIT_AUTHOR_EMAIL;     GIT_COMMITTER_NAME="$GIT_AUTHOR_NAME"; fi' -- --all

(split across lines for clarity, but not necessary)

Be sure to inspect the result when you're done, to make sure that you didn't change anything you didn't mean to!


The interactive rebase approach is pretty nice when used in conjunction with exec. You can run any shell command against a specific commit or all commits in the rebase.

First set your git author settings

git config --global user.name "John Doe"git config --global user.email johndoe@example.com

Then to reset the author for all commits after the given SHA

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

This will pop up your editor to confirm the changes. All you need to do here is save and quit and it will go through each commit and run the command specified in the -x flag.

Per @Dave's comment below, you can also change the author while maintaining the original timestamps with:

git rebase -i YOUR_SHA -x "git commit --amend --author 'New Name <new_address@example.com>' -CHEAD"


To change the author only for the last commit:

git commit --amend --author 'Author Name <author.name@mail.com>' --no-edit

Suppose you only want to change the author for the last N commits:

git rebase -i HEAD~4 -x "git commit --amend --author 'Author Name <author.name@mail.com>' --no-edit"

NOTES

  • the --no-edit flag makes sure the git commit --amend doesn't ask an extra confirmation
  • when you use git rebase -i, you can manually select the commits where to change the author,

the file you edit will look like this:

pick 897fe9e simplify code a littlepick abb60f9 add new featureexec git commit --amend --author 'Author Name <author.name@mail.com>' --no-editpick dc18f70 bugfix