Gardez votre historique de référentiel Git propre en écrasant les commits

Gardez votre historique de référentiel Git propre en écrasant les commits

Vous en avez assez des historiques de commit désordonnés qui encombrent vos dépôts Git et vos pull requests ? Heureusement, Git a la capacité de « squash commits », qui fusionne plusieurs petits commits en un seul. Cela permet de garder votre historique de code propre et organisé, et c’est facile à faire avec quelques commandes.

Pourquoi Squash s’engage ?

L’une des règles d’or de la bonne étiquette Git est de s’engager souvent avec de bons messages expliquant ce que font les commits. Cependant, cela peut rapidement devenir un problème si trop de commits sont poussés. Après tout, personne ne veut revoir une pull request avec 40 commits différents, tous prêts à être fusionnés dans master – c’est tout simplement trop encombrant.

Ainsi, avant de pousser vers un référentiel distant comme GitHub, il est recommandé d’écraser ces commits, ce qui les fusionnera tous en un seul grand commit. Tous les messages de commit de ces commits seront ajoutés au « squash commit » afin qu’ils soient toujours tous visibles lorsque vous allez les pousser vers GitHub ou soumettre votre pull request.

Il n’est pas toujours nécessaire non plus d’écraser chaque validation, car il est parfois agréable de diviser les choses si vous travaillez sur plusieurs fichiers ou parties du référentiel différents. Cependant, si vous apportez simplement plusieurs modifications à un seul fichier au fil du temps, vous devriez probablement écraser ces validations.

Pour éviter ces problèmes, il est préférable d’écraser les commits avant de pousser vers le référentiel distant. Comme c’est généralement le moment où vous voudriez le faire de toute façon, ce n’est généralement pas un problème.

Écraser les commits Git avec git merge

Il existe plusieurs manières d’écraser les commits, puisqu’il n’y a pas de git squashcommande officielle  » « . L’un des plus faciles est d’utiliser git mergele --squashdrapeau. Cette technique fusionnera les N derniers commits en un seul.

Tout d’abord, vous devez vous assurer que votre référentiel est entièrement propre, sans modifications actives. Vous pouvez git statusvérifier que vous n’avez aucune modification locale qui serait rejetée par la réinitialisation.

Ensuite, vous voudrez réinitialiser la branche à la position où elle se trouvait avant l’un des commits que vous souhaitez écraser ensemble. Par exemple, pour écraser les trois derniers commits, vous utiliseriez HEAD~3, qui est techniquement le quatrième commit de l’historique, mais supprimera les trois commits écrasables de votre historique.

git reset --hard HEAD~3

Vous pouvez également utiliser un hachage SHA-1 de validation pour référencer directement une validation. Ensuite, nous exécutons git merge --squash, avec la cible de fusion étant HEAD@{1}, qui est la position de HEAD avant la dernière commande.

git merge --squash 'HEAD@{1}'

Git a déjà mis en scène toutes les modifications avec le message de validation approprié à ce stade, mais il doit être validé :

git commit

Une fois cela fait, vous êtes libre de pousser tous les commits vers votre référentiel source en amont.

Plus de contrôle sur l’écrasement avec le rebase interactif

Si vous ne voulez pas tout écraser en un bit commit, vous pouvez effectuer un rebase interactif pour sélectionner uniquement les commits que vous souhaitez écraser. Le rebasage peut être compliqué, mais c’est facile à faire avec les bonnes étapes.

Tout d’abord, démarrez le rebase interactif en ciblant le commit avant le dernier commit squashable :

git rebase -i HEAD~3

Cela ouvrira un éditeur de texte, où vous voudrez changer « pick » en « squash » pour chaque commit que vous souhaitez fusionner.

Git ouvrira alors un autre éditeur, vous permettant de créer un nouveau message de commit pour le commit combiné. Enregistrez ceci et le rebase devrait se terminer.

Rebaser de cette façon fusionnera tous les commits écrasés dans le prochain commit au-dessus d’eux. Dans ce cas, les deuxième et troisième commits ont été fusionnés dans le premier.

Écraser les commits Git avec une interface graphique Git

Comme la plupart des actions dans Git, écraser les commits avec une interface est beaucoup plus facile que de se souvenir et de taper des commandes à chaque fois. En fait, dans GitKraken, vous pouvez simplement contrôler-cliquer sur les commits que vous souhaitez écraser, et faire un clic droit pour appuyer sur « Squash 2 commits »:

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *