Git – le b.a.-ba – changer l’auteur d’un commit
Il faut croire que la série Git – le b.a.-ba est relancée !
Alors, savez-vous comment modifier l’auteur d’un commit ? Et pourquoi en arrive-t-on à ce genre extrémité ?1
Sommaire
Introduction
En tant que contributeur, il se peut que vous ayez plusieurs identités. Tout d’abord, il y a les contributions professionnelles et personnelles. Dans le cadre professionnel, vous pouvez avoir plusieurs identités si votre entreprise a été acquise ou a été renommée. Et sur le plan personnel, vous pouvez vouloir gérer plusieurs identités numériques différentes selon la communauté avec laquelle vous interagissez.
Cette potentielle multitude d’identités fait s’il est possible à un moment donné de commiter sur projet avec la mauvaise.
De plus, si on prend en considération que l’on est amené à travailler depuis différentes machines, le risque d’erreur augmente.
Configuration
Pour rappel, il est possible de vérifier et configurer son identité sur Git de façon globale2 de cette façon :
$ git config --global user.name "Prénom NOM"
$ git config --global user.email "prenom.nom@entreprise.com"
$ git config --global --list| grep "^user\."
user.name=Prénom NOM
user.email=prenom.nom@entreprise.com
Vous pouvez également le spécifier au niveau d’un dépôt Git. Pour cela, il faut se placer dans le répertoire du dépôt et exécuter les commandes suivantes :
$ git config user.name "Prénom NOM"
$ git config user.email "prenom.nom@entreprise.com"
$ git config --list| grep "^user\."
user.name=Prénom NOM
user.email=prenom.nom@entreprise.com
Même en ayant pris ces précautions, il arrive parfois que l’on fasse un commit avec le mauvais utilisateur. Voyons donc comment corriger cela.
Solution
Dernier commit
Vous venez de vous rendre compte que vous n’avez pas commité avec le bon utilisateur ? Pas de souci, c’est sûrement le cas le plus simple puisqu’il est possible de le faire avec cette simple et unique commande :
$ git commit --amend --author="Prénom NOM <prenom.nom@entreprise.com>"
Plusieurs commits
Malheureusement, vous n’aviez pas fait attention et cela fait plusieurs commits où vous n’avez pas utilisé le bon utilisateur. Pas de panique ! Il est possible de s’en sortir en combinant la commande précédente et le git rebase interactif
.
Dans un premier temps, il faut identifier quel est le dernier commit « correct » :
$ git log --pretty=format:"%h %ae"
9aecdb7 prenom.nom@maison.com
c49d27e prenom.nom@maison.com
66c1dbb prenom.nom@maison.com
6a78abb prenom.nom@entreprise.com
63a311c prenom.nom@maison.com
adb769b prenom.nom@entreprise.com
795bc45 prenom.nom@entreprise.com
Une fois ce commit identifié, nous allons passer en rebase interactif à partir de ce dernier et marquer tous les commits à corriger en edit
au lieu de pick
:
$ git rebase -i -p adb769b
edit 63a311c ci
pick 6a78abb feat: awesome feature
edit 66c1dbb fix: awesome feature
edit c49d27e docs
edit 9aecdb7 perf
Vous validez puis pour chaque commit marqué comme à modifier, git va vous proposer de le modifier :
Stopped at 9aecdb75fbb4bbb8ecb20693dd64f42818f7eee9... perf
You can amend the commit now, with
git commit --amend
Once you are satisfied with your changes, run
git rebase --continue
Il suffit alors de demander la correction du dernier commit et continuer le rebase :
$ git commit --amend --author="Prénom NOM <prenom.nom@entreprise.com>" --no-edit
$ git rebase --continue
Premier commit
Si vous êtes attentif, vous devez vous demandez comment est-il possible de corriger le premier commit, non ? Et bien, il faut suivre exactement la même méthode que précédemment, sauf qu’au lieu de préciser l’identifiant du commit à partir duquel faire le rebase, il faut indiquer root
:
$ git rebase -i --root
Conclusion
Encore une fois, Git se révèle très pratique. Il permet de corriger tout un tas de « petites » erreurs. D’ailleurs, s’il vous arrive souvent de pester sur l’un de vos derniers commits, vous devriez appréciez le site Oh Shit, Git!?.
Remarque importe : comme ça chaque fois où vous êtes amené à réécrire l’historique Git de votre projet, il est recommandé de ne le faire que sur du code non-partagé3 !
Et vous ? Vous arrive-t-il souvent de vouloir modifier l’historique de Git ?
Laisser un commentaire