Search code examples
gitgit-filter-branch

Could I change my name and surname in all previous commits?


I would like to change my name, surname and email in my all commits, is it possible?


Solution

  • Use git-filter-branch.

    git filter-branch --commit-filter 'if [ "$GIT_AUTHOR_NAME" = "Josh Lee" ];
      then export GIT_AUTHOR_NAME="Hobo Bob"; export GIT_AUTHOR_EMAIL=hobo@example.com;
      fi; git commit-tree "$@"'
    

    This only affects the author, not the committer (which for most commits will be the same as the author). If you want to rewrite those as well, set the GIT_COMMITTER_NAME and GIT_COMMITTER_EMAIL variables.

    The standard warning about rewriting history applies; only do it to history that has not yet been shared.

    June 2018 Update

    The manual now includes a solution, using --env-filter, in its examples: https://git-scm.com/docs/git-filter-branch#_examples :

    git filter-branch --env-filter '
        if test "$GIT_AUTHOR_EMAIL" = "root@localhost"
        then
            GIT_AUTHOR_EMAIL=john@example.com
        fi
        if test "$GIT_COMMITTER_EMAIL" = "root@localhost"
        then
            GIT_COMMITTER_EMAIL=john@example.com
        fi
    ' -- --all