Erreur de commit ... Comment y remédier? Un gùchis dans l'histoire des commits ... Comment rendre tout décent? L'auteur de l'article, dont nous publions la traduction aujourd'hui, dit qu'il a été écrit spécifiquement pour ceux qui ont posé de telles questions. Selon lui, aprÚs avoir étudié les techniques de travail avec Git présentées ici, vous pouvez considérablement progresser sur la voie de la maßtrise de Git.
Il est supposé que le lecteur de cet article connaßt déjà les bases de Git. Si ce n'est pas le cas, il est d'abord recommandé de maßtriser la base, par exemple, en utilisant
ce matériau.
Correction de bugs dans les commits
Ici, nous allons examiner plusieurs scénarios d'erreurs dans les commits et leur correction.
â ScĂ©nario numĂ©ro 1
Supposons que vous ayez validé de nombreux fichiers et réalisé que le message de validation n'était pas trÚs clair. AprÚs cela, vous avez décidé de modifier ce message. Pour ce faire, utilisez la
git commit --amend
. Voici un exemple de son application:
git commit --amend -m "New commit message"
â ScĂ©nario numĂ©ro 2
Supposons que vous vouliez valider six fichiers, mais que vous n'en avez commis que cinq par erreur. Il semble que vous pouvez corriger cette erreur simplement en créant un nouveau commit et en y ajoutant le sixiÚme fichier manquant.
Cette approche a droit Ă la vie. Mais afin de conserver l'historique des validations en bon Ă©tat, il serait probablement prĂ©fĂ©rable de pouvoir ajouter un fichier ignorĂ© au mĂȘme commit. Cela peut ĂȘtre fait, encore une fois, avec la
git commit --amend
. Son utilisation ressemble Ă ceci:
git add file6 git commit
L'indicateur
--no-edit
signifie que le message de validation ne change pas.
â ScĂ©nario numĂ©ro 3
Les commits effectués dans Git sont liés au nom de l'auteur et à son adresse e-mail. En rÚgle générale, ces données sont indiquées en effectuant la configuration initiale de Git. En conséquence, ceux qui utilisent Git peuvent ne pas, lors de l'exécution de chaque commit, se soucier des informations sur son auteur.
De plus, il est tout à fait possible que lorsque vous travaillez avec certains projets, vous devrez utiliser des informations sur l'auteur, par exemple, une adresse e-mail différente des principales. Pour un tel projet, vous devez spécifier une adresse e-mail à l'aide de cette commande:
git config user.email "your email id"
Supposons que vous ayez oubliĂ© de faire cette configuration et que vous ayez dĂ©jĂ effectuĂ© le premier commit. Corriger la situation peut dĂ©jĂ nous ĂȘtre familier. En l'utilisant, vous pouvez modifier les informations sur l'auteur du commit prĂ©cĂ©dent:
git commit --amend --author "Author Name <Author Email>"
â Remarque
Utilisez la commande
amend
uniquement dans votre référentiel local. Son utilisation dans des référentiels distants peut entraßner une énorme confusion.
Mettre de l'ordre dans l'histoire des commits
Supposons que vous travaillez sur un morceau de code pour un projet. Vous savez que cela prendra environ dix jours. Pendant ces dix jours, d'autres développeurs s'engagent dans le référentiel source.
Il est recommandĂ© de maintenir la synchronisation entre les rĂ©fĂ©rentiels local et distant. Cela Ă©vite les nombreux conflits de fusion qui surviennent lorsque les rĂ©fĂ©rentiels sont trop rares pour ĂȘtre synchronisĂ©s. En suivant cette pratique, vous dĂ©cidez de tĂ©lĂ©charger les modifications Ă partir du rĂ©fĂ©rentiel distant tous les deux jours.
Chaque fois que vous téléchargez du code depuis une télécommande vers le référentiel local, un nouveau commit de fusion est créé dans le référentiel local. Cela signifie que dans votre historique de validation local, il y aura de nombreuses validations de ce type qui peuvent confondre celui qui affichera votre code.
Historique des validations dans le référentiel localComment ranger l'historique des commits? Pour résoudre ce problÚme, vous pouvez utiliser la
git rebase
.
Commande itGit rebase
Considérez la
git rebase
comme exemple.
Valide dans la branche Release et dans la branche FeatureIl existe trois
Rcommit1
dans la branche
Release
:
Rcommit1
,
Rcommit2
et
Rcommit3
. Vous avez créé votre branche
Feature
partir de la branche
Release
alors qu'elle n'avait qu'un seul commit -
Rcommit1
. AprÚs cela, vous avez ajouté deux validations à la branche
Feature
. Ce sont
Fcommit1
et
Fcommit2
. Votre objectif est de télécharger des validations de la branche
Release
vers votre branche
Feature
. Pour ce faire, vous allez utiliser la commande
rebase
.
Nous utiliserons la
release
et la
feature
noms pour les deux branches considérées.
Par conséquent, l'utilisation de la
rebase
ressemblera Ă ceci:
git checkout feature git rebase release
â CaractĂ©ristiques de la commande rebase
La commande
rebase
utilisée pour garantir que la branche
Feature
a du nouveau code de la branche
Release
.
Lors de l'application de cette commande, le systĂšme essaie d'ajouter chaque validation Ă la branche
Feature
, une à la fois, et vérifie les conflits. Si cela semble compliqué, regardons la figure suivante. Cela montre les mécanismes internes de la
rebase
.
Branche de fonctionnalitĂ©s et trois Ă©tapes de la commande rebaseĂtape 1
Lorsque la commande est appelée, la branche
Feature
pointe vers la tĂȘte de la branche
Release
. AprĂšs cela, il y a trois
Rcommit1
dans la branche
Feature
:
Rcommit1
,
Rcommit2
et
Rcommit3
. Vous aurez peut-ĂȘtre ici une question sur ce qui s'est passĂ© avec les
Fcommit1
et
Fcommit2
. Ces commits n'ont pas disparu, ils seront utilisés dans les prochaines étapes.
Ătape 2
Git essaie maintenant d'ajouter le commit
Fcommit1
Ă la branche
Feature
. S'il n'y a pas de conflit,
Fcommit1
ajouté aprÚs
Rcommit3
. Si un conflit est détecté, Git le signalera et vous devrez résoudre ce conflit manuellement.
Ătape 3
Une fois le commit
Fcommit1
ajouté à la branche
Feature
, Git essaie également d'y ajouter
Fcommit2
. LĂ encore, s'il n'y a pas de conflits,
Fcommit2
ajouté aprÚs
Fcommit1
et l'opération s'est terminée avec succÚs. Si un conflit est détecté, Git, comme précédemment, le signalera et proposera de le résoudre.
Une fois la commande
rebase
vous pouvez voir qu'il existe des
Rcommit1
,
Rcommit2
,
Rcommit3
,
Fcommit1
et
Fcommit2
dans la branche
Feature
.
â Remarque
Lorsque vous travaillez avec Git, la commande de
merge
et la commande de
rebase
sont
rebase
. Cela ne veut pas dire que l'un d'eux est préférable à l'autre.
Si vous utilisez la commande
merge
, vous recevrez un commit de
merge
. Si vous utilisez
rebase
, vous n'aurez pas de
rebase
supplémentaires.
Il est recommandé d'utiliser ces commandes dans diverses situations. Ainsi,
rebase
convient à la mise à jour du code du référentiel local basé sur le dernier code du référentiel distant. Utilisez la commande de
merge
pour effectuer des demandes d'extraction pour fusionner la branche
Feature
avec la branche
Release
ou
Master
.
Résumé
AprĂšs avoir Ă©tudiĂ© les concepts prĂ©sentĂ©s dans cet article, vous avez amĂ©liorĂ© vos compĂ©tences Git et ĂȘtes plus proche du niveau d'un expert Git. Nous espĂ©rons que ce que vous avez appris ici vous sera utile. Mais le monde de Git est immense, donc, ayant maĂźtrisĂ© quelque chose de nouveau, ne vous arrĂȘtez pas lĂ et passez Ă autre chose.
Chers lecteurs! Avez-vous rencontré un gùchis dans git commits?
