Bases des branches
- Leçon 4
- 25 min
- Module 2 : Travailler avec les branches et les dépôts distants
Leçon 4 sur 15 · L'essentiel de Git et du développement en équipeBases des branches
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
Essayez une nouvelle idée sur une ligne de travail distincte, sans modifier le travail déjà correct. Les équipes font presque tous leurs changements ainsi.
Avant de commencerCe qu’il faut savoir et avoir sous la main
Ce que vous devez savoir
- L’arbre de travail, la zone de préparation et l’historique des commits (changements enregistrés), vus dans Suivre une première modification : trois endroits pour vos modifications.
- Comment préparer et faire un commit, et lire
git log --oneline, vus dans Suivre une première modification : exemple détaillé : le premier commit d’Amira.
Ce qu’il vous faut sur votre ordinateur
-
Le dépôt
~/projects/ticket-notesavec au moins deux commits, et le fichiertickets.txt. Vous les avez créés dans Suivre une première modification : exercice guidé : créer vos premiers commits. -
Dans le dépôt,
git statusaffichenothing to commit, working tree clean(rien à enregistrer, arbre de travail propre). Si des changements apparaissent, faites d’abord un commit. -
Si le dépôt manque, refaites Configurer Git : Étape 3 : créer un dépôt. Faites ensuite l’exercice guidé de Suivre une première modification.
-
Si le dépôt manque ou ne fonctionne plus, un script peut recréer l’état de départ de cette leçon. Dans
~/projects, exécutez :Fenêtre de terminal git clone https://github.com/Nextia-Intelligence/nextia-learning-labs.gitsh nextia-learning-labs/C14/setup.sh m02-l01 --resetExécutez la commande
git cloneune seule fois. Si vous avez déjà le dossiernextia-learning-labs, exécutez plutôtgit -C nextia-learning-labs pull. Les étapes d’une demande de tirage : préparer le laboratoire d’exercice explique le script en détail. Le script crée~/projects/c14-lab/ticket-notesavec les trois commits de Suivre une première modification surmain. Leurs empreintes sont les mêmes que dans cette leçon :763ec59,49397baetd8ae027. Le commit que vous faites dans cette leçon porte votre nom et votre heure. Son empreinte diffère donc de999a7c4. C’est normal. Utilisez ensuite~/projects/c14-labà la place de~/projectsdans cette leçon.--resetsupprime d’abord un ancien dossierc14-lab, mais votre dossier~/projects/ticket-notesne change pas. -
Les empreintes de cette leçon viennent du dépôt d’Amira. Vos empreintes sont différentes. Utilisez celles de votre propre
git log.
Une branche est une étiquette sur un commit
Section intitulée « Une branche est une étiquette sur un commit »Dans le module 1, chaque commit allait sur main. main est une branche : un nom qui pointe vers un commit. Quand vous faites un nouveau commit, Git avance l’étiquette de la branche vers ce nouveau commit. L’étiquette pointe toujours vers le commit le plus récent de cette ligne de travail.
Vous pouvez créer d’autres branches. Chacune est une étiquette distincte, donc chaque ligne de travail peut avancer indépendamment. Une nouvelle branche ne coûte presque rien : Git ne copie pas vos fichiers. Il écrit seulement la nouvelle étiquette.
Comment Git sait-il sur quelle branche vous êtes? Il utilise HEAD : un pointeur vers la branche où vous êtes maintenant. Quand vous faites un commit, Git déplace la branche vers laquelle HEAD pointe. Les autres branches ne bougent pas.
Chaque commit est identifié par son empreinte de commit, que vous avez découverte dans le module 1. Un nom de branche change de cible quand la branche avance, mais une empreinte désigne toujours le même commit. Utilisez une empreinte quand vous devez parler d’un commit précis.
Exemple détaillé : une branche pour les niveaux de priorité
Section intitulée « Exemple détaillé : une branche pour les niveaux de priorité »Amira veut ajouter des niveaux de priorité aux notes sur les billets. Elle doute que son équipe soit d’accord, donc elle utilise une nouvelle branche. D’abord, elle examine ses branches et son historique :
git branchgit log --oneline* maind8ae027 (HEAD -> main) Add first ticket note49397ba Describe who the notes are for763ec59 Add READMEgit branch liste les branches. Le * (astérisque) marque la branche où elle se trouve. Dans l’historique, HEAD -> main indique la même chose : HEAD pointe vers main, et main pointe vers d8ae027.
Elle crée une branche appelée add-priorities et y passe en une seule étape. L’option -c signifie « créer » :
git switch -c add-prioritiesgit branchSwitched to a new branch 'add-priorities'* add-priorities mainElle crée maintenant priorities.txt avec une ligne, Priority levels: low, normal, urgent. (niveaux de priorité : faible, normal, urgent). Elle en fait ensuite un commit :
git add priorities.txtgit commit -m "Add priority levels"git log --oneline[add-priorities 999a7c4] Add priority levels 1 file changed, 1 insertion(+) create mode 100644 priorities.txt999a7c4 (HEAD -> add-priorities) Add priority levelsd8ae027 (main) Add first ticket note49397ba Describe who the notes are for763ec59 Add READMELe nouveau commit est sur add-priorities. main n’a pas bougé : elle pointe toujours vers d8ae027. C’est la situation du schéma ci-dessus, mais avec HEAD sur add-priorities.
Ensuite, elle revient à main et liste les fichiers :
git switch mainlsSwitched to branch 'main'README.md tickets.txtpriorities.txt a disparu du dossier. C’est normal. Quand vous changez de branche, Git modifie les fichiers de l’arbre de travail pour correspondre au commit de cette branche. Le fichier reste en sécurité dans le commit 999a7c4. Quand elle exécute git switch add-priorities, le fichier revient.
Pour voir toutes les branches en même temps, elle ajoute --all :
git log --oneline --all999a7c4 (add-priorities) Add priority levelsd8ae027 (HEAD -> main) Add first ticket note49397ba Describe who the notes are for763ec59 Add READMEExercice guidé : travailler sur une branche
Section intitulée « Exercice guidé : travailler sur une branche »-
Dans
~/projects/ticket-notes, exécutezgit status. La sortie doit inclureworking tree clean(arbre de travail propre). Sinon, faites un commit de vos changements ou supprimez-les d’abord. -
Créez une branche et passez-y :
Fenêtre de terminal git switch -c add-prioritiesLa sortie est
Switched to a new branch 'add-priorities'(passage à une nouvelle branche « add-priorities »). -
Dans votre éditeur, créez
priorities.txtavec la lignePriority levels: low, normal, urgent.Enregistrez-le. -
Préparez le fichier et faites un commit :
Fenêtre de terminal git add priorities.txtgit commit -m "Add priority levels" -
Exécutez
git log --oneline --all. Le commit le plus récent porte(HEAD -> add-priorities)(HEAD pointe vers add-priorities).mainest sur le commit précédent. -
Passez à
main:Fenêtre de terminal git switch main -
Exécutez
ls.priorities.txtn’est pas dans la liste. -
Revenez avec
git switch add-priorities, puis exécutez encorels.priorities.txtest dans la liste. -
Revenez à
mainavant de continuer.
À vous de jouer : une deuxième branche
Section intitulée « À vous de jouer : une deuxième branche »Créez une deuxième branche à partir de main, appelée add-contacts. Sur cette branche, créez contacts.txt avec les noms d’une équipe de soutien, puis faites un commit.
Répondez ensuite à ces questions avec git log --oneline --all et ls :
- Vers quel commit chacune de vos trois branches pointe-t-elle?
- Quand vous êtes sur
add-contacts, est-ce quepriorities.txtest dans le dossier? Pourquoi?
Afficher les réponses
mainpointe vers le même commit qu’avant la leçon.add-prioritiesetadd-contactspointent chacune vers leur propre nouveau commit.- Non. Vous avez créé
add-contactsà partir demain, etmainne contient paspriorities.txt. Chaque branche contient seulement les commits de sa propre ligne de travail.
Erreur courante
Mon changement m'a suivi sur l'autre branche
Symptôme : vous modifiez tickets.txt sur main, mais vous ne faites pas de commit. Vous exécutez ensuite git switch add-priorities. Git change de branche et affiche :
Switched to branch 'add-priorities'M tickets.txtVotre changement est maintenant dans l’arbre de travail de add-priorities.
Cause : les changements sans commit n’appartiennent pas à une branche. Ils restent dans l’arbre de travail quand vous changez de branche. Git bloque le changement de branche seulement si un changement risque d’être perdu. Il affiche alors une erreur.
Solution :
- Exécutez
git switch mainpour revenir. - Faites un commit du changement sur
mains’il appartient à cette branche.
Pour éviter cela, exécutez git status avant de changer de branche. Changez de branche seulement quand la sortie indique working tree clean.
Erreur courante
Référence non valide
Symptôme : git switch add-priority affiche fatal: invalid reference: add-priority (erreur fatale : référence non valide : add-priority).
Cause : aucune branche ne porte ce nom. Il s’agit généralement d’une faute de frappe. Ici, le nom est add-priorities, pas add-priority.
Solution : exécutez git branch pour voir les bons noms, puis changez de branche à nouveau.
Vérifiez votre compréhension
Prédisez : Amira est sur add-priorities. Elle fait deux autres commits. Quelles étiquettes de branche bougent, et est-ce que main change?
Afficher la réponse
Seule add-priorities bouge. Elle avance une fois par commit, donc elle finit sur le deuxième nouveau commit. main ne change pas, car HEAD pointe vers add-priorities. Git déplace seulement la branche vers laquelle HEAD pointe.
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 : avec une seule commande, montrez votre branche actuelle et le commit vers lequel chaque branche pointe.
Afficher la réponse
Exécutez git log --oneline --all. Chaque nom de branche apparaît à côté du commit vers lequel elle pointe. HEAD -> (HEAD pointe vers) indique la branche où vous êtes. Vous pouvez aussi utiliser git branch -v, qui liste chaque branche avec son empreinte de commit.
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
- Une branche est une étiquette qui pointe vers un commit. Elle avance quand vous faites un commit sur cette branche.
- HEAD pointe vers la branche où vous êtes.
git branchetgit log --oneline --alll’affichent. git switch -c namecrée une branche et y passe.git switch namepasse à une branche existante.- Quand vous changez de branche, Git modifie les fichiers pour correspondre à cette branche. Les changements sans commit restent dans l’arbre de travail.
Leçon suivante : Synchroniser de façon réfléchie