Puis-je changer mon nom et prénom dans tous les engagements précédents?

Je voudrais changer mon nom, prénom et email dans tous mes commits, est-ce possible?

Utilisez git-filter-branch .

 git filter-branch --commit-filter 'if [ "$GIT_AUTHOR_NAME" = "Josh Lee" ]; then export GIT_AUTHOR_NAME="Hobo Bob"; export [email protected]; fi; git commit-tree "$@"' 

Cela n’affecte que l’auteur, pas le committer (qui pour la plupart des commits sera le même que l’auteur). Si vous souhaitez également les réécrire, définissez les variables GIT_COMMITTER_NAME et GIT_COMMITTER_EMAIL .

L’ avertissement standard concernant l’historique de réécriture s’applique; ne le faites qu’à l’histoire qui n’a pas encore été partagée.

Mise à jour de juin 2018

Le manuel comprend maintenant une solution, utilisant --env-filter , dans ses exemples: https://git-scm.com/docs/git-filter-branch#_examples :

 git filter-branch --env-filter ' if test "$GIT_AUTHOR_EMAIL" = "root@localhost" then [email protected] fi if test "$GIT_COMMITTER_EMAIL" = "root@localhost" then [email protected] fi ' -- --all 

Pour réécrire à la fois l’auteur et le commiter dans tous les commits sélectionnés:

 git filter-branch --commit-filter \ 'if [ "$GIT_AUTHOR_NAME" = "OldAuthor Name" ]; then \ export GIT_AUTHOR_NAME="Author Name";\ export [email protected];\ export GIT_COMMITTER_NAME="Commmiter Name";\ export [email protected];\ fi;\ git commit-tree "$@"' 

S’il n’y a pas d’autres auteurs, vous pouvez faire:

 git filter-branch --commit-filter 'export GIT_AUTHOR_NAME="authorname"; \ export [email protected]; git commit-tree "$@"' 

Enregistrez le script ci-dessous, par exemple ~/.bin/git-replace-author et exécutez-le en utilisant, par exemple:

 git replace-author "John Ssmith" "John Smith" "[email protected]" 

Sans arguments, il met à jour toutes les commandes avec votre nom pour utiliser votre adresse e-mail actuelle conformément à la configuration de Git.

 DEFAULT_NAME="$(git config user.name)" DEFAULT_EMAIL="$(git config user.email)" export OLD_NAME="${1:-$DEFAULT_NAME}" export NEW_NAME="${2:-$DEFAULT_NAME}" export NEW_EMAIL="${3:-$DEFAULT_EMAIL}" echo "Old:" $OLD_NAME "<*>" echo "New:" "$NEW_NAME <$NEW_EMAIL>" echo "To undo, use: git reset $(git rev-parse HEAD)" git filter-branch --env-filter \ 'if [ "$GIT_AUTHOR_NAME" = "${OLD_NAME}" ]; then export GIT_AUTHOR_NAME="${NEW_NAME}" export GIT_AUTHOR_EMAIL="${NEW_EMAIL}" export GIT_COMMITTER_NAME="${NEW_NAME}" export GIT_COMMITTER_EMAIL="${NEW_EMAIL}" fi' 

Raw (à télécharger)

Seulement si vous n’avez pas poussé vos engagements dans le monde. Sinon, tout le monde a son ancien nom dans son repository, ce qui est peu probable que vous puissiez changer tout le monde.