Aller au contenu
English

Lire et réviser les différences

  • Leçon 8
  • 40 min
  • Module 3 : Collaborer par la revue de code

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 mainEnviron 40 minutes

Ce que vous devez savoir

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 --reset

    La 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 status affiche On branch main (sur la branche main) et working 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.

Sam a ouvert une demande de tirage : add-ticket-104 → main. Sa description est courte :

PR description (Sam)
# Add ticket 104
Source: add-ticket-104. Target: main.
## Problem
Ticket 104 is not in the notes.
## Change
Add 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.

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.

Branche actuelle : main dans le clone d’Amira, ticket-notes. Demande de tirage : add-ticket-104 → main.

Terminal (Amira, ticket-notes)
git fetch

L’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.

Terminal (Amira, ticket-notes)
git log --oneline main..origin/add-ticket-104
Sortie
5a15d07 Improve README wording
e34484f Add ticket 104

La 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.

Terminal (Amira, ticket-notes)
git diff --stat main...origin/add-ticket-104
Sortie
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.

Terminal (Amira, ticket-notes)
git diff main...origin/add-ticket-104
Sortie
diff --git a/README.md b/README.md
index 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.txt
new file mode 100644
index 0000000..8089905
--- /dev/null
+++ b/scratch.txt
@@ -0,0 +1,2 @@
+try restarting the VPN client?
+ask Amira about logs
diff --git a/tickets.txt b/tickets.txt
index 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.txt ne suit pas le format des autres lignes. Elle commence par ticket en minuscules et utilise - plutôt que : .
  • scratch.txt contient 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.

Pour voir quel commit a apporté quel changement, elle affiche chaque commit :

Terminal (Amira, ticket-notes)
git show e34484f
Sortie
commit e34484fcb68e7a8521d428d1c42c28b37ba24720
Author: Sam Okafor <sam@example.com>
Date: Tue Oct 6 09:08:00 2026 -0400
Add ticket 104
diff --git a/scratch.txt b/scratch.txt
new file mode 100644
index 0000000..8089905
--- /dev/null
+++ b/scratch.txt
@@ -0,0 +1,2 @@
try restarting the VPN client?
ask Amira about logs
diff --git a/tickets.txt b/tickets.txt
index 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.

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 :

Terminal (Amira, ticket-notes)
git switch add-ticket-104
sh check.sh
Sortie
Switched 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 :

Terminal (Amira, ticket-notes)
git switch main
Sortie
Switched to branch 'main'
Your branch is up to date with 'origin/main'.

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).

c14-lab/review-add-ticket-104.md
# 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.

  1. Dans ~/projects/c14-lab/ticket-notes, exécutez git status. La sortie affiche On branch main.

  2. Obtenez la version la plus récente du dépôt distant :

    Fenêtre de terminal
    git fetch
  3. Listez les commits de la demande de tirage :

    Fenêtre de terminal
    git log --oneline main..origin/add-ticket-104

    La sortie affiche deux commits : 5a15d07 et e34484f.

  4. Listez les fichiers que la demande modifie :

    Fenêtre de terminal
    git diff --stat main...origin/add-ticket-104

    La sortie affiche trois fichiers. Comparez-les avec la description de la demande.

  5. Lisez toutes les différences avec git diff main...origin/add-ticket-104. Trouvez la ligne dont le format est différent.

  6. Affichez chaque commit :

    Fenêtre de terminal
    git show e34484f
    git show 5a15d07

    Notez quel commit a ajouté chaque fichier.

  7. Passez à la branche et lancez la vérification :

    Fenêtre de terminal
    git switch add-ticket-104
    sh check.sh

    La sortie commence par FAIL (échec) et indique la ligne 4.

  8. Exécutez ls. scratch.txt se trouve dans le dossier sur cette branche.

  9. Revenez à main :

    Fenêtre de terminal
    git switch main
  10. Créez ~/projects/c14-lab/review-add-ticket-104.md dans votre éditeur. Rédigez vos commentaires, marqués comme bloquants ou comme suggestions, ainsi qu’un verdict.

  11. 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.

  1. Dans ~/projects/c14-lab/sam-notes, passez à add-ticket-104.
  2. Corrigez la ligne 4 de tickets.txt dans votre éditeur. Exécutez sh check.sh, puis créez un commit.
  3. Supprimez scratch.txt de la branche avec git rm, puis créez un commit.
  4. Rétablissez le texte du README pour qu’il corresponde à celui de main, puis créez un commit. Utilisez git show origin/main:README.md, qui affiche le fichier tel qu’il est sur main.
  5. Poussez les changements.
  6. Comme Amira, dans ticket-notes : récupérez les changements, relisez la portée et les différences, mettez à jour votre branche locale add-ticket-104 et 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 :

Terminal (Sam, sam-notes)
cd ~/projects/c14-lab/sam-notes
git switch add-ticket-104

Remplacez 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 :

Terminal (Sam, sam-notes)
git diff
sh check.sh
git commit -am "Fix the format of ticket 104"
Sortie (premières lignes)
diff --git a/tickets.txt b/tickets.txt
index 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 checked

git rm supprime le fichier et prépare sa suppression en une seule étape :

Terminal (Sam, sam-notes)
git rm scratch.txt
git commit -m "Remove scratch notes"
Output (first line)
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 :

Terminal (Sam, sam-notes)
git show origin/main:README.md > README.md
git diff
git commit -am "Undo the README wording change"
Sortie (premières lignes)
diff --git a/README.md b/README.md
index 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.
Terminal (Sam, sam-notes)
git push
Sortie
To /Users/amira/projects/c14-lab/team-remote.git
5a15d07..8b92dc4 add-ticket-104 -> add-ticket-104

Vos 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 :

Terminal (Amira, ticket-notes)
cd ~/projects/c14-lab/ticket-notes
git fetch
git log --oneline main..origin/add-ticket-104
git diff --stat main...origin/add-ticket-104
Sortie
From /Users/amira/projects/c14-lab/team-remote
5a15d07..8b92dc4 add-ticket-104 -> origin/add-ticket-104
8b92dc4 Undo the README wording change
27ce945 Remove scratch notes
95b27b0 Fix the format of ticket 104
5a15d07 Improve README wording
e34484f 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 :

Terminal (Amira, ticket-notes)
git switch add-ticket-104
git pull
sh check.sh
git switch main
Sortie (fin)
Fast-forward
README.md | 2 +-
scratch.txt | 2 --
tickets.txt | 2 +-
3 files changed, 2 insertions(+), 4 deletions(-)
delete mode 100644 scratch.txt
PASS: 4 ticket lines checked
Switched 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 :

Fenêtre de terminal
git diff --stat main..origin/add-ticket-104
Sortie
README.md | 2 +-
contacts.txt | 1 -
scratch.txt | 2 ++
tickets.txt | 1 +
4 files changed, 4 insertions(+), 2 deletions(-)
Fenêtre de terminal
git diff main..origin/add-ticket-104 -- contacts.txt
Sortie
diff --git a/contacts.txt b/contacts.txt
index 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-0100

On 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 :

Fenêtre de terminal
git log --oneline origin/add-ticket-104..main
Sortie
2e9e37c Add the on-call number

Correction : 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 :

Sortie
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 :

  1. Exécutez git fetch. La sortie affiche add-ticket-104 -> origin/add-ticket-104 avec deux empreintes.
  2. Exécutez git status. Il indique maintenant Your branch is behind 'origin/add-ticket-104' (votre branche est en retard sur la branche distante).
  3. Exécutez git pull, puis sh 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.

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
  1. git fetch, pour réviser la version la plus récente.
  2. git log --oneline main..origin/fix-contacts : les commits de la demande de tirage.
  3. git diff --stat main...origin/fix-contacts : les fichiers qu’elle modifie.
  4. git diff main...origin/fix-contacts, et git show <hash> pour chaque commit : le changement complet.
  5. git switch fix-contacts, puis sh check.sh : le résultat de la vérification sur la branche. Puis git switch main.

Ensuite, écrivez des commentaires marqués comme bloquants ou comme suggestions, puis un verdict.

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, et git 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