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

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 ?

  1. Non, je ne vais pas vous expliquer comme pilier le fruit du travail de vos paires ! Quoique…
  2. Enfin sur le système d’exploitation du périphérique.
  3. A moins que vous sachiez exactement ce que vous faites.