Lire et réviser les différences
- Leçon 8
- 40 min
- Module 3 : Collaborer par la revue de code
Leçon 8 sur 15 · L'essentiel de Git et du développement en équipeLire et réviser les différences
1. Comprendre un dépôt
2. Travailler avec les branches et les dépôts distants
3. Collaborer par la revue de code
4. Résoudre et récupérer
5. Mises en production et correctifs urgents
Ce que vous saurez faire
Repérez les problèmes dans une demande de tirage avant qu’ils atteignent main. Après cette leçon, vous pourrez réviser une branche avec une liste de vérification. Vous pourrez aussi rédiger des commentaires de révision qui indiquent à l’auteur quoi faire.
Avant de commencerCe qu’il faut savoir et avoir sous la main
Ce que vous devez savoir
- Les étapes d’une demande de tirage (pull request), ainsi que les branches source et cible, présentées dans Les étapes d’une demande de tirage : ce qu’est une demande de tirage.
- Comment lire les lignes
-et+degit diff, présenté dans Suivre une première modification : exemple détaillé : voir une modification avant de l’enregistrer.
Ce qu’il vous faut sur votre ordinateur
-
Le dossier
~/projects/nextia-learning-labs. Vous l’avez cloné dans Les étapes d’une demande de tirage : préparer le laboratoire d’exercice. S’il manque, faites l’étape 2 de cette section. -
Le laboratoire pratique dans l’état
m03. Réinitialisez-le pour obtenir les mêmes résultats que dans cette leçon. Dans~/projects, exécutez :Fenêtre de terminal sh nextia-learning-labs/C14/setup.sh m03 --resetLa réinitialisation supprime tout le dossier
c14-lab, y compris vos fichiers de demande de tirage de la dernière leçon. Copiez-les d’abord dans un autre dossier si vous voulez les garder. -
Allez ensuite dans
~/projects/c14-lab/ticket-notes.git statusafficheOn branch main(sur la branche main) etworking tree clean(répertoire de travail propre). La branche de Sam,add-ticket-104, que vous révisez dans cette leçon, se trouve sur le dépôt distant. Le script l’a créée.
Ce que cherche la personne qui révise
Section intitulée « Ce que cherche la personne qui révise »Sam a ouvert une demande de tirage : add-ticket-104 → main. Sa description est courte :
# Add ticket 104
Source: add-ticket-104. Target: main.
## ProblemTicket 104 is not in the notes.
## ChangeAdd ticket 104 to tickets.txt.Une révision ne se limite pas à « le changement semble correct ». Vous comparez la description de la demande avec le contenu réel de la branche. Utilisez cette liste de vérification pour chaque demande :
| Vérification | Question | Comment y répondre |
|---|---|---|
| Portée | Quels commits et fichiers la demande contient-elle? | git log --oneline main..<branch> et git diff --stat main...<branch> |
| Comportement | Chaque changement fait-il ce que la description indique? | Lisez toutes les différences et utilisez git show pour chaque commit (enregistrement d’un changement). |
| Vérifications et tests | La vérification réussit-elle sur la branche? | Passez à la branche et exécutez sh check.sh. |
| Fichiers accidentels | Y a-t-il un fichier qui n’a pas sa place : notes, journaux, secrets, fichiers générés? | Cherchez les noms inattendus dans git diff --stat. |
| Changements sans rapport | Y a-t-il un changement que la description ne mentionne pas? | Comparez chaque commit avec la section Change (changement). |
| Messages | Le message de chaque commit décrit-il son changement? | git show <hash>. Le message n’est pas le changement. |
Deux points ou trois points
Section intitulée « Deux points ou trois points »Avant l’exemple détaillé, vous devez connaître un détail des commandes. git log et git diff acceptent tous deux A..B et A...B, mais les points ont des sens différents :
| Commande | Ce qu’elle affiche |
|---|---|
git log main..add-ticket-104 |
Les commits de add-ticket-104 qui ne sont pas sur main. Ce sont les commits de la demande de tirage. |
git diff main...add-ticket-104 |
Les changements faits par add-ticket-104 depuis sa création à partir de main. C’est ce que la demande ajoute. |
git diff main..add-ticket-104 |
La différence entre les deux commits les plus récents. Elle montre aussi, en sens inverse, chaque changement reçu par main après la création de la branche. |
Pour une révision, utilisez donc deux points avec git log et trois points avec git diff. L’erreur fréquente à la fin de cette leçon montre le problème causé par deux points dans git diff.
Le commit à partir duquel une branche a été créée est sa base de fusion. Trois points comparent la branche à sa base de fusion, pas à la version la plus récente de main.
Exemple détaillé : Amira révise add-ticket-104
Section intitulée « Exemple détaillé : Amira révise add-ticket-104 »Branche actuelle : main dans le clone d’Amira, ticket-notes. Demande de tirage : add-ticket-104 → main.
1. Obtenir la version la plus récente de la branche
Section intitulée « 1. Obtenir la version la plus récente de la branche »git fetchL’absence de sortie indique que sa copie des références du dépôt distant est déjà à jour. Récupérez toujours les mises à jour avant de réviser. Sinon, vous révisez une ancienne version de la branche.
2. Portée : commits et fichiers
Section intitulée « 2. Portée : commits et fichiers »git log --oneline main..origin/add-ticket-1045a15d07 Improve README wordinge34484f Add ticket 104La demande porte sur le billet 104, mais elle contient deux commits. Improve README wording (améliorer la formulation du README) ne figure pas dans la description. Amira le note.
git diff --stat main...origin/add-ticket-104 README.md | 2 +- scratch.txt | 2 ++ tickets.txt | 1 + 3 files changed, 4 insertions(+), 1 deletion(-)--stat affiche un résumé : chaque fichier et le nombre de lignes ajoutées (+) et supprimées (-). La demande modifie trois fichiers. La description mentionne seulement tickets.txt. scratch.txt est un nouveau fichier dont le nom laisse penser qu’il contient des notes personnelles.
3. Comportement : toutes les différences
Section intitulée « 3. Comportement : toutes les différences »git diff main...origin/add-ticket-104diff --git a/README.md b/README.mdindex a30ec45..378c442 100644--- a/README.md+++ b/README.md@@ -1,3 +1,3 @@ # Ticket notes
-Notes about support tickets for the help desk.+Notes about the support tickets that the help desk receives.diff --git a/scratch.txt b/scratch.txtnew file mode 100644index 0000000..8089905--- /dev/null+++ b/scratch.txt@@ -0,0 +1,2 @@+try restarting the VPN client?+ask Amira about logsdiff --git a/tickets.txt b/tickets.txtindex 68cc955..0e68cf1 100644--- a/tickets.txt+++ b/tickets.txt@@ -1,3 +1,4 @@ Ticket 101: printer offline. Restarted the spooler. Ticket 102: password reset email not received. Ticket 103: shared drive is slow. Moved the user to the new server.+ticket 104 - VPN drops every hour.Amira trouve trois problèmes :
- La nouvelle ligne de
tickets.txtne suit pas le format des autres lignes. Elle commence particketen minuscules et utilise-plutôt que:. scratch.txtcontient les notes de travail de Sam. Il n’a pas sa place dans le dépôt.- Le changement du README porte sur un autre sujet que le billet 104.
4. Un commit à la fois
Section intitulée « 4. Un commit à la fois »Pour voir quel commit a apporté quel changement, elle affiche chaque commit :
git show e34484fcommit e34484fcb68e7a8521d428d1c42c28b37ba24720Author: Sam Okafor <sam@example.com>Date: Tue Oct 6 09:08:00 2026 -0400
Add ticket 104
diff --git a/scratch.txt b/scratch.txtnew file mode 100644index 0000000..8089905--- /dev/null+++ b/scratch.txt@@ -0,0 +1,2 @@try restarting the VPN client?ask Amira about logsdiff --git a/tickets.txt b/tickets.txtindex 68cc955..0e68cf1 100644--- a/tickets.txt+++ b/tickets.txt@@ -1,3 +1,4 @@ Ticket 101: printer offline. Restarted the spooler. Ticket 102: password reset email not received. Ticket 103: shared drive is slow. Moved the user to the new server.ticket 104 - VPN drops every hour.Le message indique Add ticket 104 (ajouter le billet 104), mais le commit ajoute aussi scratch.txt. C’est pourquoi vous lisez le changement, et pas seulement le message. git show 5a15d07 montre que le deuxième commit modifie seulement README.md.
5. Lancer la vérification sur la branche
Section intitulée « 5. Lancer la vérification sur la branche »La personne qui révise lance la vérification sur les fichiers de la branche, pas sur main. Amira passe à la branche. Git crée une branche locale add-ticket-104 qui suit origin/add-ticket-104, comme vous l’avez vu au module 2 :
git switch add-ticket-104sh check.shSwitched to a new branch 'add-ticket-104'branch 'add-ticket-104' set up to track 'origin/add-ticket-104'.FAIL: these lines in tickets.txt do not start with 'Ticket <number>: '4:ticket 104 - VPN drops every hour.La vérification échoue à la ligne 4. La description de la demande n’a pas de section How I checked (comment j’ai vérifié). Sam n’a donc probablement pas lancé la vérification. Amira revient à main :
git switch mainSwitched to branch 'main'Your branch is up to date with 'origin/main'.6. Rédiger la révision
Section intitulée « 6. Rédiger la révision »Un commentaire de révision utile est :
- Précis. Il nomme le fichier, la ligne ou le commit, indique le problème et précise quoi faire.
- Marqué comme bloquant ou comme suggestion. Un commentaire bloquant exige une correction avant la fusion. Une suggestion est une idée que l’auteur peut accepter ou non.
- Bienveillant. Il porte sur le changement, pas sur la personne. « Cette ligne fait échouer la vérification » vaut mieux que « Vous avez encore oublié le format ».
La révision se termine par un verdict : approuver ou demander des changements. Un seul commentaire bloquant suffit pour demander des changements.
Simulation : Amira rédige sa révision dans ~/projects/c14-lab/review-add-ticket-104.md. Sur GitHub, elle écrirait chaque commentaire sur la ligne concernée, dans l’onglet Files changed (fichiers modifiés).
# Review of add-ticket-104 → main
Verdict: request changes.
1. Blocking. tickets.txt, line 4: "ticket 104 - VPN drops every hour." fails sh check.sh. Please use the format of the other lines: "Ticket 104: VPN drops every hour."2. Blocking. scratch.txt looks like working notes, and commit e34484f added it. Please remove it from the branch.3. Blocking. The README change in 5a15d07 is not about ticket 104. The new wording is clear, so please open a separate PR for it, and take it out of this one.4. Suggestion. Add a How I checked section to the PR description, with the output of sh check.sh.Exercice guidé : révisez vous-même la demande de tirage
Section intitulée « Exercice guidé : révisez vous-même la demande de tirage »Simulation : vous jouez le rôle d’Amira, qui révise la demande. Notez chaque élément trouvé avant de lire l’étape suivante.
-
Dans
~/projects/c14-lab/ticket-notes, exécutezgit status. La sortie afficheOn branch main. -
Obtenez la version la plus récente du dépôt distant :
Fenêtre de terminal git fetch -
Listez les commits de la demande de tirage :
Fenêtre de terminal git log --oneline main..origin/add-ticket-104La sortie affiche deux commits :
5a15d07ete34484f. -
Listez les fichiers que la demande modifie :
Fenêtre de terminal git diff --stat main...origin/add-ticket-104La sortie affiche trois fichiers. Comparez-les avec la description de la demande.
-
Lisez toutes les différences avec
git diff main...origin/add-ticket-104. Trouvez la ligne dont le format est différent. -
Affichez chaque commit :
Fenêtre de terminal git show e34484fgit show 5a15d07Notez quel commit a ajouté chaque fichier.
-
Passez à la branche et lancez la vérification :
Fenêtre de terminal git switch add-ticket-104sh check.shLa sortie commence par
FAIL(échec) et indique la ligne 4. -
Exécutez
ls.scratch.txtse trouve dans le dossier sur cette branche. -
Revenez à
main:Fenêtre de terminal git switch main -
Créez
~/projects/c14-lab/review-add-ticket-104.mddans votre éditeur. Rédigez vos commentaires, marqués comme bloquants ou comme suggestions, ainsi qu’un verdict. -
Comparez votre révision avec celle d’Amira dans l’exemple détaillé. Avez-vous trouvé l’erreur de format, le fichier accidentel et le changement sans rapport?
À vous : corrigez la demande de tirage comme Sam, puis révisez-la à nouveau
Section intitulée « À vous : corrigez la demande de tirage comme Sam, puis révisez-la à nouveau »Changez de rôle. Vous êtes maintenant Sam, dans sam-notes. Corrigez les trois problèmes bloquants sur la même branche avec de nouveaux commits (enregistrements des changements). Ne modifiez pas et ne supprimez pas les anciens commits. Puis poussez les changements et révisez la demande de tirage (pull request) à nouveau comme Amira.
- Dans
~/projects/c14-lab/sam-notes, passez àadd-ticket-104. - Corrigez la ligne 4 de
tickets.txtdans votre éditeur. Exécutezsh check.sh, puis créez un commit. - Supprimez
scratch.txtde la branche avecgit rm, puis créez un commit. - Rétablissez le texte du README pour qu’il corresponde à celui de
main, puis créez un commit. Utilisezgit show origin/main:README.md, qui affiche le fichier tel qu’il est surmain. - Poussez les changements.
- Comme Amira, dans
ticket-notes: récupérez les changements, relisez la portée et les différences, mettez à jour votre branche localeadd-ticket-104et lancez la vérification. Choisissez le verdict.
Afficher une réponse modèle
Comme Sam, dans sam-notes. Passez à la branche. Git crée une branche locale à partir de origin/add-ticket-104 :
cd ~/projects/c14-lab/sam-notesgit switch add-ticket-104Remplacez la ligne 4 de tickets.txt par Ticket 104: VPN drops every hour. (Billet 104 : le VPN se déconnecte chaque heure) et enregistrez. Puis vérifiez le changement et créez un commit :
git diffsh check.shgit commit -am "Fix the format of ticket 104"diff --git a/tickets.txt b/tickets.txtindex 0e68cf1..4971bbf 100644--- a/tickets.txt+++ b/tickets.txt@@ -1,4 +1,4 @@ Ticket 101: printer offline. Restarted the spooler. Ticket 102: password reset email not received. Ticket 103: shared drive is slow. Moved the user to the new server.-ticket 104 - VPN drops every hour.+Ticket 104: VPN drops every hour.PASS: 4 ticket lines checkedgit rm supprime le fichier et prépare sa suppression en une seule étape :
git rm scratch.txtgit commit -m "Remove scratch notes"rm 'scratch.txt'La commande suivante remplace le fichier README.md du dossier par sa version de main. > remplace tout le texte du fichier. Exécutez cette commande uniquement pour ce fichier :
git show origin/main:README.md > README.mdgit diffgit commit -am "Undo the README wording change"diff --git a/README.md b/README.mdindex 378c442..a30ec45 100644--- a/README.md+++ b/README.md@@ -1,3 +1,3 @@ # Ticket notes
-Notes about the support tickets that the help desk receives.+Notes about support tickets for the help desk.git pushTo /Users/amira/projects/c14-lab/team-remote.git 5a15d07..8b92dc4 add-ticket-104 -> add-ticket-104Vos empreintes diffèrent de 8b92dc4, car vous avez créé ces commits.
Comme Amira, dans ticket-notes. Récupérez les changements, puis vérifiez la portée :
cd ~/projects/c14-lab/ticket-notesgit fetchgit log --oneline main..origin/add-ticket-104git diff --stat main...origin/add-ticket-104From /Users/amira/projects/c14-lab/team-remote 5a15d07..8b92dc4 add-ticket-104 -> origin/add-ticket-1048b92dc4 Undo the README wording change27ce945 Remove scratch notes95b27b0 Fix the format of ticket 1045a15d07 Improve README wordinge34484f Add ticket 104 tickets.txt | 1 + 1 file changed, 1 insertion(+)La demande de tirage contient maintenant cinq commits, mais le changement total correspond à une ligne dans tickets.txt. Les commits de correction annulent le changement du README et l’ajout de scratch.txt. Mettez à jour la branche locale et lancez la vérification :
git switch add-ticket-104git pullsh check.shgit switch mainFast-forward README.md | 2 +- scratch.txt | 2 -- tickets.txt | 2 +- 3 files changed, 2 insertions(+), 4 deletions(-) delete mode 100644 scratch.txtPASS: 4 ticket lines checkedSwitched to branch 'main'Your branch is up to date with 'origin/main'.Verdict : approuver. Chaque commentaire bloquant a été traité, et la vérification réussit.
Il reste un point : le commit e34484f contient encore scratch.txt dans l’historique de la branche. Ici, c’est acceptable, car les notes ne sont pas secrètes. Si le fichier contenait un secret, le supprimer dans un nouveau commit ne suffirait pas. Consultez Garder le dépôt propre. La prochaine leçon présente une méthode de fusion qui garde les cinq commits hors de main.
Erreur courante
Les différences montrent des changements que l'auteur n'a jamais faits
Symptôme : vous utilisez deux points avec git diff. La sortie montre un fichier que la demande de tirage ne modifie pas, avec une ligne supprimée :
git diff --stat main..origin/add-ticket-104 README.md | 2 +- contacts.txt | 1 - scratch.txt | 2 ++ tickets.txt | 1 + 4 files changed, 4 insertions(+), 2 deletions(-)git diff main..origin/add-ticket-104 -- contacts.txtdiff --git a/contacts.txt b/contacts.txtindex 9563930..0ce0116 100644--- a/contacts.txt+++ b/contacts.txt@@ -1,4 +1,3 @@ Help desk: ext. 4100 Network team: ext. 4410 Accounts team: ext. 4300-On-call engineer: 555-0100On dirait que Sam a supprimé le numéro de la personne de garde. Ce n’est pas le cas.
Cause : deux points comparent le dernier commit de main au dernier commit de la branche. main a reçu un nouveau commit après que Sam a créé sa branche. La branche ne le contient pas, alors les différences montrent ce commit à l’envers. Pour voir le commit, listez ce que main contient et que la branche ne contient pas :
git log --oneline origin/add-ticket-104..main2e9e37c Add the on-call numberCorrection : utilisez trois points pour afficher les différences à réviser : git diff main...origin/add-ticket-104. Trois points comparent la branche au commit dont elle est issue. Vous voyez donc uniquement les changements de la demande de tirage. Si vous avez déjà écrit un commentaire sur la ligne supprimée, retirez-le.
Erreur courante
L'auteur dit que le problème est corrigé, mais la vérification échoue encore
Symptôme : Sam a poussé une correction. Vous passez à add-ticket-104 et lancez la vérification. Elle échoue encore sur l’ancienne ligne, et git status indique que votre branche est à jour :
Switched to branch 'add-ticket-104'Your branch is up to date with 'origin/add-ticket-104'.FAIL: these lines in tickets.txt do not start with 'Ticket <number>: '4:ticket 104 - VPN drops every hour.Cause : vous n’avez pas récupéré les changements. « À jour » compare votre branche à votre copie de l’état du dépôt distant, et cette copie est ancienne. Vous révisez l’ancienne version de la demande de tirage.
Correction :
- Exécutez
git fetch. La sortie afficheadd-ticket-104 -> origin/add-ticket-104avec deux empreintes. - Exécutez
git status. Il indique maintenantYour branch is behind 'origin/add-ticket-104'(votre branche est en retard sur la branche distante). - Exécutez
git pull, puissh check.shà nouveau.
Récupérez les changements au début de chaque révision, puis avant chaque nouvel examen d’une demande de tirage.
Vérifiez votre compréhension
Expliquez : Amira exécute git diff main..origin/add-ticket-104. Pourquoi la sortie affiche-t-elle '-On-call engineer : 555-0100', alors que Sam n'a jamais modifié contacts.txt? Que doit-elle exécuter plutôt?
Afficher la réponse
Deux points comparent directement les deux derniers commits. main contient un commit, 2e9e37c Add the on-call number (ajouter le numéro de la personne de garde), créé après le début de la branche. La branche ne contient pas cette ligne, alors la comparaison l’affiche comme supprimée. Elle doit utiliser trois points : git diff main...origin/add-ticket-104. Cette commande compare la branche à sa base de fusion et montre uniquement les changements de la demande de tirage.
Votre réponse contient-elle les points principaux de la nôtre ?
Connectez-vous et inscrivez-vous au cours pour enregistrer vos réponses. Chaque vérification compte pour le certificat.
Vérifiez votre compréhension
Vérification pratique : un collègue vous demande de réviser fix-contacts → main. Donnez, dans l'ordre, les commandes qui affichent les commits, les fichiers modifiés, le changement complet et le résultat de la vérification.
Afficher la réponse
git fetch, pour réviser la version la plus récente.git log --oneline main..origin/fix-contacts: les commits de la demande de tirage.git diff --stat main...origin/fix-contacts: les fichiers qu’elle modifie.git diff main...origin/fix-contacts, etgit show <hash>pour chaque commit : le changement complet.git switch fix-contacts, puissh check.sh: le résultat de la vérification sur la branche. Puisgit switch main.
Ensuite, écrivez des commentaires marqués comme bloquants ou comme suggestions, puis un verdict.
Votre réponse contient-elle les points principaux de la nôtre ?
Connectez-vous et inscrivez-vous au cours pour enregistrer vos réponses. Chaque vérification compte pour le certificat.
Récapitulatif
- Révisez avec une liste de vérification : portée, comportement, vérifications, fichiers ajoutés par erreur, changements sans lien et messages.
- Utilisez
git log main..<branch>pour les commits d’une demande de tirage, etgit diff main...<branch>pour ses changements. git show <hash>montre ce qu’un commit a réellement modifié. Le message n’est pas le changement.- Lancez la vérification sur la branche, pas sur
main. Récupérez d’abord les changements. - Écrivez des commentaires précis et bienveillants, marqués comme bloquants ou comme suggestions. Terminez par un verdict.
- L’auteur corrige une demande de tirage avec de nouveaux commits sur la même branche. Ensuite, vous la révisez à nouveau.
Leçon suivante : Stratégies de fusion