Modifier l'auteur des commit sur un arbre git

commit-tree

Si comme moi vous utilisez plusieurs identités différentes pour committer votre code sur vos repos git (par exemple votre nom et email professionnels pour le travail et un pseudo et votre email perso pour vos projets perso), il vous est surement déjà arrivé d'avoir des commits avec le mauvais nom ou le mauvais email.

Heureusement git vous permet de modifier ces informations en réécrivant l'arbre de commit.

Pour cela vous pouvez utiliser la commande suivante :

git filter-branch --commit-filter \
'if [ "$GIT_AUTHOR_NAME" = "Maxime COLIN" ]; then \
export GIT_AUTHOR_NAME="foobar";\
export GIT_AUTHOR_EMAIL=foobar@example.com;\
export GIT_COMMITTER_NAME="foobar";\
export GIT_COMMITTER_EMAIL=foobar@example.com;\
fi;\
git commit-tree "$@"'

Cette commande modifiera tout les commit dont l'auteur est "Maxime COLIN" et remplacera le nom et l'email de l'auteur et du committer par "foobar" et "foobar@example.com".

L'arbre de commit entier sera réécrit, vous devrez alors faire un push --force pour pousser vos modification.

Script

Si vous êtes amené à utiliser souvent cette commande, vous pouvez la mettre dans un script bash :

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'

Le script s'utilise de la façon suivante :

nom-du-script "Ancien nom" "Nouveau nom" "Nouvelle adresse email"

Utilisé sans argument, il modifie tous les commits en utilisant le nom et l'email renseignés dans votre config git.

git config

Une fois vos commit mis à jour, pensez à modifier la config de votre repo git pour définir le nom et l'email de l'auteur à utiliser pour vos prochains commit.

$ git config user.name “foobar”
$ git config user.email “foobar@example.com”

Source

Les commentaires