Aller au contenu
English

Les étapes d'une demande de tirage

  • Leçon 7
  • 45 min
  • Module 3 : Collaborer par la revue de code

Ce que vous saurez faire

Intégrez une modification à main comme les équipes le font : sur sa propre branche, avec une vérification et une révision avant la fusion. Après cette leçon, vous pourrez faire passer une modification par toutes les étapes d’une demande de tirage.

Avant de commencerCe qu’il faut savoir et avoir sous la mainEnviron 45 minutes

Ce que vous devez savoir

Ce qu’il vous faut sur votre ordinateur

  • Un terminal dans votre dossier ~/projects. Sous Windows, utilisez Git Bash, selon Premiers pas dans le terminal : obtenir un terminal.
  • Git, configuré avec votre nom et votre adresse courriel, selon Configurer Git : Étape 2 : indiquer votre identité à Git. Les commits que vous faites dans le laboratoire affichent ce nom.
  • Une connexion Internet, une seule fois, pour cloner les fichiers d’exercice dans Préparer le laboratoire d’exercice. Cette section crée le laboratoire et montre comment le recréer avec --reset.
  • Vous n’avez pas besoin de compte sur un site Web. Cette leçon est une simulation locale : le dépôt distant est un dossier sur votre ordinateur, et vous jouez les deux personnes.
  • Le script de préparation crée ses commits avec des noms et des dates fixes. Leurs empreintes sont donc les mêmes que dans cette leçon, par exemple e058b3f. Les commits que vous faites vous-même ont des empreintes différentes. Utilisez celles de votre propre sortie.

Testé avec Git 2.54 sur macOS, Windows (Git Bash) et Linux. Git 2.40 ou une version ultérieure est nécessaire. Le script de préparation des laboratoires n’a pas encore été testé dans Git Bash sous Windows.

À partir de ce module, vous vous exercez dans un laboratoire qu’un script crée pour vous. Le laboratoire a un état initial connu : les mêmes fichiers, branches et commits que dans les leçons. Si quelque chose ne fonctionne pas, vous pouvez le recréer en quelques secondes.

Votre dépôt ~/projects/ticket-notes des modules 1 et 2 ne change pas. Le laboratoire se trouve dans un nouveau dossier.

  1. Allez dans votre dossier de projets :

    Fenêtre de terminal
    cd ~/projects
  2. Obtenez les fichiers d’exercice. Faites cette étape une seule fois. Si vous avez déjà le dossier nextia-learning-labs, exécutez plutôt git -C nextia-learning-labs pull pour obtenir la version la plus récente.

    Fenêtre de terminal
    git clone https://github.com/Nextia-Intelligence/nextia-learning-labs.git

    La sortie commence par Cloning into 'nextia-learning-labs'... (clonage dans « nextia-learning-labs »).

  3. Créez le laboratoire de ce module :

    Fenêtre de terminal
    sh nextia-learning-labs/C14/setup.sh m03
    Sortie
    Ready: /Users/amira/projects/c14-lab
    ticket-notes your clone
    sam-notes Sam's clone
    team-remote.git the shared remote
    Next: cd c14-lab/ticket-notes
    To start this scenario again: sh nextia-learning-labs/C14/setup.sh m03 --reset
  4. Entrez dans votre clone et regardez l’historique :

    Fenêtre de terminal
    cd c14-lab/ticket-notes
    git log --oneline --graph --all
    Sortie
    * 2e9e37c (HEAD -> main, origin/main, origin/HEAD) Add the on-call number
    | * 6c3828f (origin/add-faq, add-faq) Add a network question to the FAQ
    | * 6b53600 Add FAQ
    |/
    | * 5a15d07 (origin/add-ticket-104) Improve README wording
    | * e34484f Add ticket 104
    |/
    * e058b3f Add ticket 103
    * bae8898 Add a format check for ticket notes
    * eec3e5b Ignore secrets, exports and logs
    * 55b7943 Add contacts
    * 6a0bdd9 Add ticket 102
    * e01bd9f Add first ticket note
    * ec0aceb Add README

    Si vos empreintes sont les mêmes, le laboratoire est prêt.

Le dossier c14-lab contient trois dépôts :

Dossier Ce qu’il contient
team-remote.git Le dépôt distant partagé : un dépôt nu, comme dans le module 2.
ticket-notes Votre clone. Vous travaillez ici dans le rôle d’Amira. Vos propres commits affichent le nom de vos paramètres globaux (module 1).
sam-notes Le clone de votre coéquipier, Sam Okafor. Son identité est déjà configurée comme celle de Sam. Les commits que vous y faites affichent donc son nom.

Les autres branches, add-ticket-104 et add-faq, servent aux deux prochaines leçons.

Pour recommencer à tout moment, allez dans ~/projects et ajoutez --reset à la commande de préparation. Elle supprime seulement le dossier c14-lab, puis le recrée :

Fenêtre de terminal
sh nextia-learning-labs/C14/setup.sh m03 --reset

Sans --reset, le script ne supprime rien. Il s’arrête avec The folder c14-lab already exists (le dossier c14-lab existe déjà).

Dans une équipe, personne ne fait de commit directement sur main. Chaque modification va d’abord sur sa propre branche. Ensuite, son auteur demande à l’équipe de la fusionner. Cette demande est une demande de tirage (pull request, PR) : une demande de fusion d’une branche source dans une branche cible après révision. GitLab appelle la même chose une demande de fusion (merge request).

Chaque PR a deux branches. Vous devez toujours savoir laquelle est laquelle :

  • La branche source contient les nouveaux commits. Dans cette leçon, c’est add-ticket-template.
  • La branche cible reçoit les commits. Habituellement, c’est main.

Cette leçon écrit la paire sous la forme add-ticket-template → main.

Avant la fusion, deux choses se passent :

  • Une vérification est une commande qui teste automatiquement la modification, par exemple une vérification du format ou les tests d’un programme. Sur un service hébergé comme GitHub, un service d’intégration continue (CI) exécute les vérifications chaque fois que vous poussez vers la branche.
  • Une révision a lieu quand un coéquipier lit la modification et prend une décision. La personne qui révise l’approuve ou demande des modifications : elle demande à l’auteur de corriger quelque chose d’abord.

À la fin, quelqu’un fusionne la PR. Vous avez vu la fusion dans le module 2 : Git réunit deux lignes d’historique avec un nouveau commit. Ce commit a les deux comme parents.

Un diagramme de séquence avec quatre participants : auteur, dépôt distant, vérifications et personne qui révise. L'auteur crée une branche et fait un commit. L'auteur pousse add-ticket-template vers le dépôt distant. L'auteur ouvre la PR, de add-ticket-template vers main, pour la personne qui révise. Le dépôt distant exécute la vérification, qui signale sa réussite ou son échec à la personne qui révise. Cette personne récupère les modifications et lit le journal et les différences, puis demande des modifications. L'auteur fait un nouveau commit et le pousse. La vérification s'exécute de nouveau. La personne qui révise approuve. L'auteur fusionne dans main, pousse et supprime la branche.
Les étapes d'une demande de tirage. La PR suit la branche, donc une nouvelle poussée met à jour la même PR.

Un service hébergé affiche la PR sur une page Web. Vous n’en avez pas besoin pour apprendre les étapes. Cette leçon réalise chaque étape avec des commandes Git et des fichiers texte :

Étape Dans cette leçon (simulation) Sur GitHub (facultatif, non requis)
Créer une branche et faire un commit git switch -c, git commit La même chose.
Pousser la branche git push -u origin add-ticket-template La même chose. GitHub affiche ensuite un bouton Compare & pull request (comparer et créer une demande de tirage).
Ouvrir la PR Écrivez la description de la PR dans un fichier texte à côté du dépôt. Sélectionnez Compare & pull request. Réglez base (branche cible) sur main et compare (branche source) sur add-ticket-template. Écrivez la description, puis sélectionnez Create pull request (créer une demande de tirage).
Exécuter les vérifications Exécutez vous-même sh check.sh. Le service CI exécute les vérifications. Vous voyez le résultat dans l’onglet Checks (vérifications).
Réviser Dans sam-notes, récupérez les modifications, puis lisez git log et git diff. Écrivez la révision dans le fichier de la PR. La personne qui révise lit l’onglet Files changed (fichiers modifiés), puis sélectionne Review changes (réviser les modifications), puis Request changes (demander des modifications) ou Approve (approuver).
Répondre à la révision Faites un nouveau commit sur la même branche et poussez-le. La même chose. La PR affiche le nouveau commit.
Fusionner Passez à main, fusionnez avec --no-ff et poussez. Sélectionnez Merge pull request (fusionner la demande de tirage), puis Confirm merge (confirmer la fusion).
Supprimer la branche git branch -d et git push origin --delete Sélectionnez Delete branch (supprimer la branche). Exécutez ensuite git branch -d sur votre ordinateur.

Exemple détaillé : un modèle pour les lignes de billets

Section intitulée « Exemple détaillé : un modèle pour les lignes de billets »

Le dépôt ticket-notes a une vérification, check.sh. Elle échoue quand une ligne de tickets.txt ne commence pas par Ticket <number>: (Billet, suivi du numéro et de deux-points). Les nouvelles personnes au service d’assistance ne connaissent pas ce format. Amira veut ajouter un modèle qui le montre.

Branche actuelle : main. Amira s’assure que main est à jour, car la nouvelle branche part de celle-ci :

Terminal (Amira, ticket-notes)
git pull
Sortie
Already up to date.

Elle crée la branche source :

Terminal (Amira, ticket-notes)
git switch -c add-ticket-template
Sortie
Switched to a new branch 'add-ticket-template'

Branche actuelle : add-ticket-template. Elle crée template.txt avec une ligne :

template.txt
Ticket <number>: <the problem>. <what you did>.

Elle le place dans la zone de préparation et fait un commit (enregistrement des changements) :

Terminal (Amira, ticket-notes)
git add template.txt
git commit -m "Add a template for ticket lines"
Sortie
[add-ticket-template d08926d] Add a template for ticket lines
1 file changed, 1 insertion(+)
create mode 100644 template.txt

Avant de demander une révision, Amira vérifie deux choses. D’abord, la branche contient seulement son changement. main..add-ticket-template signifie « les commits sur add-ticket-template qui ne sont pas sur main » :

Terminal (Amira, ticket-notes)
git log --oneline main..add-ticket-template
Sortie
d08926d Add a template for ticket lines

Un seul commit, et c’est le sien. Ensuite, la vérification réussit :

Terminal (Amira, ticket-notes)
sh check.sh
Sortie
PASS: 3 ticket lines checked

sh check.sh exécute le script dans le fichier check.sh. Sur GitHub, l’intégration continue (CI) exécute cette même commande à chaque envoi. Ici, vous l’exécutez vous-même.

Terminal (Amira, ticket-notes)
git push -u origin add-ticket-template
Sortie
To /Users/amira/projects/c14-lab/team-remote.git
* [new branch] add-ticket-template -> add-ticket-template
branch 'add-ticket-template' set up to track 'origin/add-ticket-template'.

Demande de tirage (PR) : add-ticket-template → main. Une bonne description de PR répond à trois questions pour la personne qui révise : quel est le problème, qu’avez-vous changé et comment l’avez-vous vérifié? Amira l’écrit dans un nouveau fichier, ~/projects/c14-lab/pr-add-ticket-template.md. Le fichier se trouve à côté du dépôt, pas dedans. Il ne fait donc pas partie d’un commit.

c14-lab/pr-add-ticket-template.md
# Add a template for ticket lines
Source: add-ticket-template. Target: main.
## Problem
New help desk staff write ticket lines in different formats.
Then check.sh fails, and they do not know why.
## Change
Add template.txt. It shows the format that check.sh expects.
## How I checked
- `git log --oneline main..add-ticket-template` shows only my commit.
- `sh check.sh` on the branch: PASS: 3 ticket lines checked.

Sam révise dans son propre clone. Il récupère les changements pour que sa copie des informations du dépôt distant contienne la nouvelle branche :

Terminal (Sam, sam-notes)
cd ../sam-notes
git fetch
Sortie
From /Users/amira/projects/c14-lab/team-remote
* [new branch] add-ticket-template -> origin/add-ticket-template

Il lit les commits et le changement. Le diff (comparaison des changements) utilise trois points : main...origin/add-ticket-template montre seulement les changements faits par la branche. La prochaine leçon explique pourquoi les trois points comptent.

Terminal (Sam, sam-notes)
git log --oneline main..origin/add-ticket-template
git diff main...origin/add-ticket-template
Sortie
d08926d Add a template for ticket lines
diff --git a/template.txt b/template.txt
new file mode 100644
index 0000000..9333f70
--- /dev/null
+++ b/template.txt
@@ -0,0 +1 @@
Ticket <number>: <the problem>. <what you did>.

Le changement est correct, mais les espaces réservés seuls sont difficiles à comprendre. Sam demande des changements. Il ajoute sa révision à la fin du fichier de la PR :

c14-lab/pr-add-ticket-template.md (end)
## Review (Sam): request changes
- Blocking: please add one real example line under the template.
New staff learn the format faster from an example.

Branche actuelle : add-ticket-template dans le clone d’Amira. Elle n’ouvre pas une nouvelle PR. Elle ajoute un commit à la même branche :

template.txt
Ticket <number>: <the problem>. <what you did>.
Example: Ticket 101: printer offline. Restarted the spooler.
Terminal (Amira, ticket-notes)
cd ../ticket-notes
git commit -am "Add an example to the ticket template"
sh check.sh
git push
Sortie
[add-ticket-template 48f03a7] Add an example to the ticket template
1 file changed, 1 insertion(+)
PASS: 3 ticket lines checked
To /Users/amira/projects/c14-lab/team-remote.git
d08926d..48f03a7 add-ticket-template -> add-ticket-template

Une PR suit sa branche source, pas un commit fixe. L’envoi met donc la PR à jour. Sur GitHub, le nouveau commit apparaît dans la même PR, et les vérifications s’exécutent de nouveau.

Sam récupère les changements et les relit. La branche a maintenant deux commits :

Terminal (Sam, sam-notes)
git fetch
git log --oneline main..origin/add-ticket-template
Sortie
From /Users/amira/projects/c14-lab/team-remote
d08926d..48f03a7 add-ticket-template -> origin/add-ticket-template
48f03a7 Add an example to the ticket template
d08926d Add a template for ticket lines

Il lit le nouveau commit avec git show 48f03a7, puis l’approuve. Il ajoute une ligne au fichier de la PR : ## Review (Sam): approved (Révision (Sam) : approuvée).

Branche actuelle : main dans le clone d’Amira. PR : add-ticket-template → main. Elle passe à la branche cible et la met à jour. Un collègue peut avoir poussé des changements vers main pendant la révision :

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

Elle fusionne la branche source dans main :

Terminal (Amira, ticket-notes)
git merge --no-ff --no-edit add-ticket-template
Sortie
Merge made by the 'ort' strategy.
template.txt | 2 ++
1 file changed, 2 insertions(+)
create mode 100644 template.txt
  • --no-ff signifie « sans avance rapide ». Ici, main n’a pas bougé depuis la création de la branche. Git pourrait donc simplement avancer l’étiquette main. --no-ff crée quand même un commit de fusion. Ce commit indique que la PR a été fusionnée à ce moment-là. L’option Create a merge commit (créer un commit de fusion) de GitHub fait la même chose. La troisième leçon de ce module la compare aux autres options.
  • --no-edit conserve le message proposé par Git, donc aucun éditeur ne s’ouvre.

Le résultat de la fusion est nouveau : il combine la branche avec la version la plus récente de main. Elle relance donc la vérification, puis regarde l’historique :

Terminal (Amira, ticket-notes)
sh check.sh
git log --oneline --graph -5
Sortie
PASS: 3 ticket lines checked
* dbdc0c1 (HEAD -> main) Merge branch 'add-ticket-template'
|\
| * 48f03a7 (origin/add-ticket-template, add-ticket-template) Add an example to the ticket template
| * d08926d Add a template for ticket lines
|/
* 2e9e37c (origin/main, origin/HEAD) Add the on-call number
* e058b3f Add ticket 103

Le commit de fusion dbdc0c1 a deux parents : 2e9e37c de main et 48f03a7 de la branche. Elle pousse main :

Terminal (Amira, ticket-notes)
git push
Sortie
To /Users/amira/projects/c14-lab/team-remote.git
2e9e37c..dbdc0c1 main -> main

Le travail est maintenant dans main, donc l’étiquette de branche n’est plus nécessaire. Elle la supprime sur son ordinateur, puis sur le dépôt distant :

Terminal (Amira, ticket-notes)
git branch -d add-ticket-template
git push origin --delete add-ticket-template
Sortie
Deleted branch add-ticket-template (was 48f03a7).
To /Users/amira/projects/c14-lab/team-remote.git
- [deleted] add-ticket-template

-d supprime une branche seulement quand ses commits sont fusionnés. Les commits ne sont pas supprimés : ils font partie de main.

Faites l’exemple détaillé dans votre laboratoire. Vous jouez Amira dans ticket-notes et Sam dans sam-notes. À chaque étape, dites la branche actuelle et la PR (add-ticket-template → main) à voix haute ou dans une note.

  1. Dans ~/projects/c14-lab/ticket-notes, exécutez git status. La sortie doit afficher On branch main (sur la branche main) et working tree clean (répertoire de travail sans changements).

  2. Exécutez git pull. La sortie est Already up to date. (déjà à jour).

  3. Créez la branche source :

    Fenêtre de terminal
    git switch -c add-ticket-template
  4. Dans votre éditeur, créez template.txt avec la ligne de modèle de l’exemple détaillé. Enregistrez-le.

  5. Placez le fichier dans la zone de préparation et faites un commit :

    Fenêtre de terminal
    git add template.txt
    git commit -m "Add a template for ticket lines"
  6. Exécutez git log --oneline main..add-ticket-template. La sortie montre un seul commit : le vôtre.

  7. Exécutez sh check.sh. La sortie est PASS: 3 ticket lines checked (réussite : 3 lignes de billets vérifiées).

  8. Poussez la branche :

    Fenêtre de terminal
    git push -u origin add-ticket-template

    La sortie contient * [new branch] (nouvelle branche).

  9. Dans votre éditeur, créez ~/projects/c14-lab/pr-add-ticket-template.md. Écrivez la source, la cible et les trois sections : problème, changement et méthode de vérification.

  10. Simulation : révisez comme Sam. Allez dans le clone de Sam et récupérez les changements :

    Fenêtre de terminal
    cd ../sam-notes
    git fetch

    La sortie contient [new branch] add-ticket-template -> origin/add-ticket-template (nouvelle branche).

  11. Lisez le changement :

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

    Le diff montre un nouveau fichier, template.txt.

  12. Ajoutez la révision de Sam à la fin du fichier de la PR : demandez des changements et une ligne d’exemple.

  13. Retournez dans votre clone. Assurez-vous d’être sur la branche source :

    Fenêtre de terminal
    cd ../ticket-notes
    git status

    La sortie commence par On branch add-ticket-template (sur la branche add-ticket-template).

  14. Ajoutez la ligne d’exemple à template.txt. Enregistrez-le. Puis faites un commit, vérifiez et poussez :

    Fenêtre de terminal
    git commit -am "Add an example to the ticket template"
    sh check.sh
    git push
  15. Exécutez cd ../sam-notes, puis git fetch, puis git log --oneline main..origin/add-ticket-template. La sortie montre deux commits. Ajoutez ## Review (Sam): approved au fichier de la PR.

  16. Dans ticket-notes, passez à la branche cible et mettez-la à jour :

    Fenêtre de terminal
    git switch main
    git pull
  17. Fusionnez la branche source :

    Fenêtre de terminal
    git merge --no-ff --no-edit add-ticket-template

    La sortie commence par Merge made by the 'ort' strategy. (fusion effectuée avec la stratégie « ort »).

  18. Exécutez sh check.sh. La sortie est PASS: 3 ticket lines checked.

  19. Exécutez git log --oneline --graph -5. Le commit le plus récent est Merge branch 'add-ticket-template' (fusionner la branche « add-ticket-template »). Deux lignes se trouvent en dessous.

  20. Poussez main :

    Fenêtre de terminal
    git push
  21. Supprimez la branche sur votre ordinateur et sur le dépôt distant :

    Fenêtre de terminal
    git branch -d add-ticket-template
    git push origin --delete add-ticket-template
  22. Exécutez git branch -a. add-ticket-template et remotes/origin/add-ticket-template ne sont pas dans la liste.

À vous de jouer : préparer votre propre demande de tirage

Section intitulée « À vous de jouer : préparer votre propre demande de tirage »

Préparez une demande de tirage simulée pour une nouvelle modification. Choisissez un nom de branche, par exemple add-ticket-105. La modification peut être une nouvelle ligne dans tickets.txt, ou un nouveau contact dans contacts.txt.

  1. Partez d’une branche main à jour et créez la branche source.
  2. Faites un commit (enregistrement des modifications). Vérifiez que la branche contient seulement votre commit et que sh check.sh réussit.
  3. Poussez la branche.
  4. Rédigez ~/projects/c14-lab/pr-<your branch>.md avec la source, la cible et les sections Problem (problème), Change (modification) et How I checked (mes vérifications). Dans How I checked, écrivez les commandes exécutées et leurs résultats.

Ne faites pas encore la fusion. Une personne qui révise doit pouvoir comprendre et vérifier la demande avec seulement le fichier et la branche.

Afficher une réponse modèle
Terminal (Amira, ticket-notes)
git switch main
git pull
git switch -c add-ticket-105

Ajoutez une ligne à la fin de tickets.txt, puis enregistrez le fichier :

tickets.txt (new line)
Ticket 105: new starter has no email account. Created the account.
Terminal (Amira, ticket-notes)
git commit -am "Add ticket 105"
git log --oneline main..add-ticket-105
sh check.sh
git push -u origin add-ticket-105
Sortie (fin)
11525d0 Add ticket 105
PASS: 4 ticket lines checked
To /Users/amira/projects/c14-lab/team-remote.git
* [new branch] add-ticket-105 -> add-ticket-105
branch 'add-ticket-105' set up to track 'origin/add-ticket-105'.
c14-lab/pr-add-ticket-105.md
# Add ticket 105
Source: add-ticket-105. Target: main.
## Problem
Ticket 105 (a new starter with no email account) is closed,
but it is not in the ticket notes.
## Change
Add one line for ticket 105 to tickets.txt.
## How I checked
- `git log --oneline main..add-ticket-105` shows one commit, "Add ticket 105".
- `git diff --stat main...add-ticket-105` shows only tickets.txt, 1 line added.
- `sh check.sh` on the branch: PASS: 4 ticket lines checked.

Un bon énoncé du problème explique ce qui ne va pas sans la modification. De bonnes notes de validation donnent les commandes et les résultats exacts pour permettre à la personne qui révise de les reproduire. « J’ai testé » ne suffit pas.

Erreur courante

J'ai fait un commit sur main, pas sur une branche

Symptôme : vous avez oublié git switch -c et fait un commit sur main. git status affiche :

Sortie
On branch main
Your branch is ahead of 'origin/main' by 1 commit.
(use "git push" to publish your local commits)
nothing to commit, working tree clean

Ne suivez pas le conseil de pousser. Cette opération envoie le commit directement sur la branche main de l’équipe, sans vérification ni révision.

Cause : le commit a été ajouté à la branche vers laquelle HEAD pointait, soit main.

Solution : placez une nouvelle étiquette de branche sur votre commit, puis ramenez main à la position du dépôt distant.

  1. Créez la branche source depuis votre position actuelle. Elle contient votre commit :

    Fenêtre de terminal
    git switch -c add-ticket-template
  2. Ramenez l’étiquette main à origin/main. Vous n’êtes plus sur main, donc cette opération est permise :

    Fenêtre de terminal
    git branch -f main origin/main
    Sortie
    branch 'main' set up to track 'origin/main'.
  3. Vérifiez le résultat avec git log --oneline -3 :

    Sortie
    d08926d (HEAD -> add-ticket-template) Add a template for ticket lines
    2e9e37c (origin/main, origin/HEAD, main) Add the on-call number
    e058b3f Add ticket 103

Votre commit se trouve sur add-ticket-template, et main correspond de nouveau à origin/main. Continuez avec la poussée et la demande de tirage. Utilisez cette solution seulement pour un commit que vous n’avez pas poussé.

Erreur courante

La demande de tirage affiche des commits qui ne sont pas les miens

Symptôme : la personne qui révise voit plus de commits et de fichiers que vous n’en avez modifiés :

Fenêtre de terminal
git log --oneline main..origin/add-ticket-template
git diff --stat main...origin/add-ticket-template
Sortie
43b832b Add a template for ticket lines
6c3828f Add a network question to the FAQ
6b53600 Add FAQ
faq.txt | 5 +++++
template.txt | 1 +
2 files changed, 6 insertions(+)

Cause : vous avez créé la branche depuis add-faq, et non depuis main. git switch -c crée la nouvelle branche à partir de votre branche actuelle. La nouvelle branche contient donc aussi les commits de la FAQ. Si vous la fusionnez, ils entrent dans main sans révision distincte.

Solution : créez une branche correcte depuis main, puis copiez seulement votre fichier dans cette branche. git show add-ticket-template:template.txt affiche le fichier tel qu’il est sur la mauvaise branche. > l’écrit dans le dossier.

  1. git switch main
  2. git switch -c add-template
  3. git show add-ticket-template:template.txt > template.txt
  4. git add template.txt, puis git commit -m "Add a template for ticket lines"
  5. Exécutez git log --oneline main..add-template. La commande affiche seulement votre commit.
  6. Poussez la nouvelle branche avec git push -u origin add-template, puis utilisez-la pour la demande de tirage.
  7. Supprimez la mauvaise branche du dépôt distant et de votre ordinateur : git push origin --delete add-ticket-template, puis git branch -D add-ticket-template.

-D supprime une branche même si ses commits ne sont pas fusionnés. Utilisez cette option seulement après avoir copié votre travail. Pour éviter cette erreur, exécutez git status avant git switch -c. Assurez-vous que la commande affiche On branch main (sur la branche main).

Vérifiez votre compréhension

Prédisez : Sam demande des modifications pour add-ticket-template → main. Amira ajoute un commit à add-ticket-template et le pousse. Doit-elle ouvrir une nouvelle demande de tirage? Que voit Sam quand il récupère les modifications?

Afficher la réponse

Pas de nouvelle demande de tirage. Une demande suit sa branche source, pas un commit fixe. Après la poussée, la même demande contient les deux commits. Quand Sam récupère les modifications, origin/add-ticket-template avance et git log --oneline main..origin/add-ticket-template affiche deux commits. Sur GitHub, les vérifications s’exécutent aussi de nouveau pour le nouveau commit.

Vérifiez votre compréhension

Vérification pratique : avant de demander une révision, montrez que votre branche contient seulement vos commits, quels fichiers elle modifie et que la vérification réussit.

Afficher la réponse

Sur votre branche source, exécutez :

  • git log --oneline main..HEAD : la liste contient seulement vos commits.
  • git diff --stat main...HEAD : la liste contient seulement les fichiers que vous vouliez modifier.
  • sh check.sh : la sortie commence par PASS (réussite).

Écrivez ces commandes et leurs résultats dans la section How I checked de la description de votre demande de tirage.

Récapitulatif

  • Une demande de tirage demande de fusionner une branche source dans une branche cible après une vérification et une révision. Sachez toujours quelles sont les deux branches.
  • La séquence est : branche, commit, vérification, poussée, ouverture de la demande, révision, réponse, fusion, suppression de la branche.
  • Pour répondre à une révision, poussez un nouveau commit vers la même branche. La demande de tirage se met à jour automatiquement.
  • git merge --no-ff crée toujours un commit de fusion, qui indique où la demande de tirage a été fusionnée.
  • Relancez la vérification après la fusion, car le résultat de la fusion est nouveau.
  • Dans ce laboratoire, sh nextia-learning-labs/C14/setup.sh m03 --reset, exécuté depuis ~/projects, vous permet de repartir à zéro.

Leçon suivante : Lire et réviser les différences