MaĂźtriser Git đ§© : versioning & branches simples
Mise Ă jour :

Git est lâoutil de gestion de versions de code le plus populaire et largement utilisĂ© dans le dĂ©veloppement des infrastructures informatiques. Le but de cette documentation est de vous donner les bases pour vous dĂ©brouiller dans votre travail de tous les jours.
Lâhistoire de Git
Git est un systĂšme de contrĂŽle de version distribuĂ© open source. Il est disponible sur presque tous les systĂšmes dâexploitation.
En 2005, Linus Torvalds a créé git en tant que systĂšme de contrĂŽle de version distribuĂ© alors parce quâil ne pouvait plus utiliser BitKeeper gratuitement.
Désormais, git est le systÚme le plus utilisé par les développeurs. Sa nature distribuée facilite le développement, le suivi et la bonne collaboration avec les modifications de code.
Git dans le domaine du DevOps ?
Un consultant DevOps devra développer du code et de ce fait le stocker. Il se doit donc maßtriser Git pour stocker ses codes sources :
- de lâinfrastructure pour le provisionnement et la gestion de configuration
- des pipelines CI/CD
- des programmes quâil aura en charge dâĂ©crire
Les Concepts Clés de Git
Dans cette section, nous allons aborder tous les concepts et mots clés qui vous aideront à progresser.
SystÚme de contrÎle de version distribué
Chaque dĂ©veloppeur possĂšde une copie complĂšte de lâhistorique du projet, ce qui permet de travailler localement.
DépÎts (Repositories)
Les dĂ©pĂŽts, souvent appelĂ©s âreposâ en abrĂ©gĂ©, est essentiellement une base de donnĂ©es qui stocke toutes les versions de votre projet, ainsi que lâhistorique complet des modifications. Il existe deux types principaux de dĂ©pĂŽts Git.
DépÎt distant
Un dĂ©pĂŽt distant est une copie du projet qui est hĂ©bergĂ©e sur un serveur distant. Les dĂ©pĂŽts distants facilitent la collaboration entre plusieurs dĂ©veloppeurs. Le dĂ©pĂŽt distant peut ĂȘtre accessible en lecture et en Ă©criture par plusieurs personnes, ce qui permet de partager le code, de travailler ensemble et de synchroniser les modifications. Des services tels que GitHub, GitLab et Bitbucket offrent des options dâhĂ©bergement de dĂ©pĂŽts Git.
DépÎt local
Un dĂ©pĂŽt local est une copie de votre projet stockĂ©e sur votre propre machine. Chaque dĂ©veloppeur travaillant sur le projet aura son propre dĂ©pĂŽt local. Cela permet Ă chacun de travailler indĂ©pendamment, dâeffectuer des modifications, dâenregistrer des commits et dâexplorer lâhistorique sans avoir besoin dâune connexion Internet.
Historique enregistré
Git enregistre lâhistorique complet des modifications apportĂ©es au code source, ce qui permet de suivre chaque modification, quel que soit le moment oĂč elle a Ă©tĂ© effectuĂ©e.
Collaboration
Git facilite la collaboration entre plusieurs dĂ©veloppeurs. Plusieurs personnes peuvent travailler sur le mĂȘme projet simultanĂ©ment en utilisant des branches distinctes.
Branches
Les branches est un concept central de Git. Elles permettent de travailler sur des fonctionnalitĂ©s ou des correctifs de maniĂšre isolĂ©e sans affecter la branche principale (gĂ©nĂ©ralement appelĂ©e âmasterâ ou âmainâ).
Commit
Les commits sont la pierre angulaire de Git et sont utilisĂ©s pour enregistrer lâhistorique des modifications dâun projet. Un commit est un instantanĂ© (snapshot) de lâĂ©tat dâun projet Ă un moment donnĂ©. Plus prĂ©cisĂ©ment, un commit reprĂ©sente une sĂ©rie de modifications apportĂ©es aux fichiers dâun projet Ă un moment prĂ©cis, accompagnĂ©e dâun message descriptif qui les explique.
Grùce aux commits, il est possible de revenir en arriÚre et de restaurer le projet à un état antérieur en sélectionnant un commit précédent. Cela permet de résoudre les problÚmes, de revenir à une version stable ou de réappliquer des modifications précédemment supprimées.
Les différentes URL git
Dans Git, il existe principalement deux types dâURLs utilisĂ©s pour accĂ©der et interagir avec des dĂ©pĂŽts distants : les URLs HTTPS et les URLs SSH. Chacun a ses propres caractĂ©ristiques et exigences en matiĂšre de configuration et dâutilisation.
URLs HTTPS
-
Format : Les URLs HTTPS ressemblent Ă des URLs web classiques et commencent par
https://. Par exemple :https://github.com/username/repository.git -
Utilisation : Les URLs HTTPS sont utilisĂ©es pour cloner, pousser et tirer des modifications depuis des dĂ©pĂŽts distants via le protocole HTTPS. Elles sont souvent prĂ©fĂ©rĂ©es dans les configurations oĂč la simplicitĂ© est privilĂ©giĂ©e.
-
Authentification : Lâauthentification avec les URLs HTTPS se fait gĂ©nĂ©ralement via un nom dâutilisateur et un mot de passe. Cependant, de nombreux services comme GitHub exigent dĂ©sormais lâutilisation de jetons dâaccĂšs personnel (Personal Access Tokens) au lieu de mots de passe pour une sĂ©curitĂ© accrue.
-
Avantages :
- FacilitĂ© dâutilisation et configuration minimale.
- Pas besoin de gérer des clés SSH.
- Plus adaptĂ© aux environnements oĂč les connexions SSH sont bloquĂ©es.
-
Inconvénients :
- La nĂ©cessitĂ© de saisir des identifiants de maniĂšre rĂ©pĂ©tĂ©e, sauf si un gestionnaire de mots de passe ou des jetons dâaccĂšs sont utilisĂ©s.
- Moins sécurisé que SSH pour les opérations de transfert de données.
URLs SSH
-
Format : Les URLs SSH sont formatées différemment et commencent par
ssh://ou simplement par un identifiant dâutilisateur suivi dâun@et de lâadresse du serveur. Par exemple :git@github.com:username/repository.git -
Utilisation : Les URLs SSH sont utilisées pour des opérations similaires aux URLs HTTPS (clone, push, pull), mais via le protocole SSH.
-
Authentification : Lâauthentification SSH repose sur un Ă©change de clĂ©s. Vous devez gĂ©nĂ©rer une paire de clĂ©s SSH (publique et privĂ©e) sur votre machine et enregistrer la clĂ© publique sur le serveur Git distant (comme GitHub ou GitLab).
-
Avantages :
- Plus sĂ©curisĂ©, car lâauthentification est basĂ©e sur des clĂ©s et non sur des mots de passe.
- Pas besoin dâentrer des identifiants Ă chaque opĂ©ration une fois la clĂ© SSH configurĂ©e.
- Préférable pour des opérations automatisées, comme les scripts ou les intégrations continues.
-
Inconvénients :
- Nécessite une configuration initiale de la clé SSH.
- Peut ĂȘtre bloquĂ© par certains pare-feux ou rĂ©seaux dâentreprise.
Installation de Git
Pour commencer Ă utiliser Git, vous devez dâabord lâinstaller sur votre systĂšme. Heureusement, Git est compatible avec diffĂ©rentes plates-formes, notamment Windows, macOS et Linux. Voici comment vous pouvez lâinstaller :
Installation de Git sous Windows
Je vous conseille de tĂ©lĂ©charger le package dâinstallation pour Windows Ă partir du site officiel de Git (<https://git-scm.com/download/win\> â) et de suivre les instructions dâinstallation.
Installation de Git sous macOS
Sur macOS, Git est habituellement prĂ©installĂ©. Vous pouvez vĂ©rifier sâil est dĂ©jĂ
installĂ© en ouvrant le Terminal puis en exĂ©cutant la commande git âversion.
Si ce nâest pas le cas, vous pouvez installer Git via un gestionnaire de paquets
tel que Homebrew.
Installation de Git Sous Linux
Sur la plupart des distributions Linux, vous pouvez installer Git Ă lâaide du gestionnaire de paquets.
Par exemple, sur un poste Ubuntu :
sudo -iadd-apt-repository ppa:git-core/ppaapt updateapt install gitLes principales commandes git
Configuration de Git
La configuration de git pour lâutilisateur se trouve dans le dossier
~/.gitconfig ou ~/.config/git/config. Pour éviter de véroler ce fichier de
config, on fait appel à la commande git config. Par exemple pour définir la
branche par défaut :
git config --global init.defaultBranch mainPour retrouver les valeurs des configs actuelles :
git config --listfile:/home/bob/.gitconfig user.name=StĂ©phane ROBERTfile:/home/bob/.gitconfig user.email=stephane.robert.28@gmail.comfile:/home/bob/.gitconfig core.editor=code --waitfile:/home/bob/.gitconfig init.defaultbranch=mainfile:.git/config core.repositoryformatversion=0file:.git/config core.filemode=truefile:.git/config core.bare=falsefile:.git/config core.logallrefupdates=truePlus dâinfos ici â
PremiĂšre configuration aprĂšs installation
Une fois Git installĂ©, vous devez le configurer. Les premiers paramĂštres Ă
dĂ©finir sont votre nom dâutilisateur et votre adresse e-mail, car ces
informations seront associées à chaque commit que vous ferez. Vous pouvez
configurer Git en utilisant les commandes suivantes dans le terminal :
git config --global user.name "Votre Nom"git config --global user.email "votre@email.com"TĂ©lĂ©chargement dâun projet git
La commande permettant de télécharger localement un projet avec la commande git
clone :
git clone [OPTION] [dossier]Si vous renseignez un dossier, la commande nâutilise pas le nom du projet pour le nom du dossier, mais celui indiquĂ©.
Les principales options de la commande git clone :
--recurse-submodules: Télécharge également tous les sous-modules. Un concept que nous verrons dans une autre documentation.
Exemple :
git clone https://github.com/git/git.git /tmp/git
git clone https://github.com/git/git.git /tmp/git
Clonage dans '/tmp/git'...remote: Enumerating objects: 356178, done.remote: Counting objects: 100% (458/458), done.remote: Compressing objects: 100% (218/218), done.RĂ©ception d'objets: 23% (81921/356178), 37.52 Mio | 4.29 Mio/s...RĂ©solution des deltas: 100% (267808/267808), fait.Initialisation dâun projet git
Nous verrons dans cette section comment initialiser votre premier projet Git
localement. Pour cela, on fait appel Ă la commande git init :
git init [OPTION] [dossier]- Si vous renseignez un dossier, la commande est exĂ©cutĂ©e Ă lâintĂ©rieur de celui-ci. Si ce dossier nâexiste pas, il sera créé.
- Si vous ne renseignez pas de dossier alors la commande est exécutée dans le répertoire actuel.
Les principales options de la commande git init :
--initial-branch=name:
Exemple :
git init --initial-branch=main /tmp/totoDépÎt Git vide initialisé dans /tmp/toto/.git/Comme vous le remarquez la commande git init créé un dossier .git dans
lequel on trouve :
drwxrwxr-x 7 bob bob 4096 nov. 2 13:58 .drwxrwxr-x 3 bob bob 4096 nov. 2 13:58 ..drwxrwxr-x 2 bob bob 4096 nov. 2 13:58 branches-rw-rw-r-- 1 bob bob 92 nov. 2 13:58 config-rw-rw-r-- 1 bob bob 73 nov. 2 13:58 description-rw-rw-r-- 1 bob bob 21 nov. 2 13:58 HEADdrwxrwxr-x 2 bob bob 4096 nov. 2 13:58 hooksdrwxrwxr-x 2 bob bob 4096 nov. 2 13:58 infodrwxrwxr-x 4 bob bob 4096 nov. 2 13:58 objectsdrwxrwxr-x 4 bob bob 4096 nov. 2 13:58 refs- la configuration du fonctionnement du projet dans le fichier
config. - des dossiers qui permettent de gĂ©rer tout lâhistorique du projet. Plus dâinfos ici â
- âŠ
Gestion des branches dans git
La gestion des branches est fondamental de Git, offrant une flexibilité immense pour le développement parallÚle et la collaboration. En DevOps, savoir manipuler les branches efficacement est important pour maintenir un flux de travail continu et organisé.
CrĂ©ation dâune Nouvelle Branche
Pour créer une nouvelle branche, la commande git branch <nom_de_la_branche>
est utilisée. Cette opération est rapide car Git crée simplement un nouveau
pointeur vers le commit actuel. Par exemple, git branch feature-nouvelle crée
une branche nommée feature-nouvelle.
git branch feature-nouvelleBasculer entre les Branches
Une fois la branche créée, il faut y basculer pour y apporter des modifications.
La commande git checkout <nom_de_la_branche> permet de changer de branche.
Ainsi, git checkout feature-nouvelle vous positionne sur la branche
feature-nouvelle.
git checkout feature-nouvelle
Basculement sur la branche 'feature-nouvelle'Lister les Branches
Pour lister les branches dans un dépÎt Git, vous pouvez utiliser la commande
git branch. Cette commande offre différentes options pour afficher les
branches selon vos besoins. Voici quelques exemples courants :
-
Lister les branches locales : Pour voir toutes les branches locales dans votre dépÎt, utilisez simplement :
Terminal window git branch* devfeature-nouvellemainCette commande affichera la liste des branches locales, en mettant en évidence la branche sur laquelle vous vous trouvez actuellement.
-
Lister toutes les branches, y compris les branches distantes : Si vous souhaitez voir Ă la fois les branches locales et les branches distantes (câest-Ă -dire celles sur le serveur), utilisez :
Terminal window git branch -a* devfeature-nouvellemainremotes/origin/HEAD -> origin/mainremotes/origin/devremotes/origin/mainLes branches distantes seront listées sous un préfixe
remotes/. -
Lister uniquement les branches distantes : Pour ne voir que les branches qui existent sur le serveur distant (par exemple, sur GitHub ou GitLab), vous pouvez utiliser :
Terminal window git branch -rorigin/HEAD -> origin/mainorigin/devorigin/main -
Afficher les branches avec les derniers commits : Pour obtenir une vue plus dĂ©taillĂ©e, y compris le dernier commit sur chaque branche, utilisez lâoption
-v:Terminal window git branch -v* dev 2790a91 correctionfeature-nouvelle 2790a91 correctionmain 4e05890 add README -
Rechercher des branches par un motif : Si vous cherchez des branches avec un nom spécifique ou suivant un motif, vous pouvez utiliser :
Terminal window git branch --list "*de*"* dev
Supprimer une Branche
Pour supprimer une branche dans Git, vous pouvez utiliser la commande git branch avec différentes options, en fonction de si vous souhaitez supprimer une
branche localement ou sur un dépÎt distant. Voici comment procéder :
Supprimer une Branche Locale
Pour supprimer une branche locale, la commande est la suivante :
git branch -d <nom_de_la_branche>-dest lâoption pour âdeleteâ (supprimer).- Remplacez
<nom_de_la_branche>par le nom de la branche que vous voulez supprimer.
Par exemple, pour supprimer une branche nommée feature-obsolete :
git branch -d feature-obsoleteSupprimer une Branche sur un DépÎt Distant
Pour supprimer une branche sur un dépÎt distant (comme GitHub ou GitLab), utilisez la commande suivante :
git push <remote> --delete <nom_de_la_branche><remote>est le nom du dépÎt distant (souventorigin).- Remplacez
<nom_de_la_branche>par le nom de la branche distante que vous souhaitez supprimer.
Par exemple, pour supprimer la branche feature-obsolete du dépÎt distant nommé
origin :
git push origin --delete feature-obsoleteAjouter des fichiers Ă lâindex
Pour ajouter des fichiers Ă lâindex dans Git, ce qui signifie les prĂ©parer pour
un commit, vous utilisez la commande git add. Voici les différentes maniÚres
de lâutiliser :
Ajouter un Fichier Spécifique
Pour ajouter un fichier spĂ©cifique Ă lâindex, utilisez :
git add <nom_du_fichier>Par exemple, pour ajouter un fichier nommé exemple.txt, tapez :
git add exemple.txtAjouter Plusieurs Fichiers
Si vous souhaitez ajouter plusieurs fichiers spĂ©cifiques, vous pouvez les lister tous dans la mĂȘme commande :
git add <fichier1> <fichier2> <fichier3>Par exemple :
git add exemple1.txt exemple2.txt exemple3.txtAjouter Tous les Fichiers Modifiés
Pour ajouter tous les fichiers modifiés (nouveaux fichiers, fichiers modifiés, fichiers supprimés) dans le répertoire courant et ses sous-répertoires, utilisez :
git add .Ou :
git add -ACes commandes ajoutent tous les changements dans votre rĂ©pertoire de travail Ă lâindex.
Ajouter des Parties de Fichiers (Staging Interactif)
Si vous souhaitez ajouter seulement certaines parties dâun fichier modifiĂ© (et pas dâautres modifications dans le mĂȘme fichier), utilisez :
git add -p <nom_du_fichier>Cette commande lance un mode interactif vous permettant de choisir quelles modifications ajouter au commit. Câest utile pour diviser vos modifications en commits logiques et clairs.
Ajouter des Fichiers par Motif
Enfin, vous pouvez ajouter des fichiers selon un motif spécifique. Par exemple,
pour ajouter tous les fichiers .txt :
git add *.txtLâutilisation de git add est une Ă©tape essentielle dans le workflow Git, car
elle permet de sélectionner précisément les modifications que vous souhaitez
inclure dans votre prochain commit. Cela facilite la création de commits propres
et bien organisés.
Retirer des fichiers Ă lâindex
Pour retirer des fichiers de lâindex dans Git, câest-Ă -dire annuler leur ajout
(staging) en vue dâun futur commit, vous pouvez utiliser la commande git rm.
Cette commande sert à la fois à supprimer des fichiers de votre répertoire de
travail et Ă retirer ces modifications de lâindex. Voici comment lâutiliser :
Supprimer et Retirer des Fichiers
Pour supprimer un fichier de votre rĂ©pertoire de travail et retirer ce fichier de lâindex, utilisez :
git rm <fichier>Par exemple, pour supprimer et retirer exemple.txt :
git rm exemple.txtCette action supprime le fichier de votre systĂšme de fichiers et met Ă jour lâindex pour reflĂ©ter cette suppression.
Retirer des Fichiers de lâIndex Sans les Supprimer
Si vous voulez simplement retirer un fichier de lâindex sans le supprimer de
votre rĂ©pertoire de travail, utilisez lâoption --cached :
git rm --cached <fichier>Par exemple, pour retirer exemple.txt de lâindex tout en le conservant dans
votre répertoire :
git rm --cached exemple.txtCela est particuliĂšrement utile si vous avez accidentellement ajoutĂ© un fichier Ă lâindex que vous ne voulez pas inclure dans votre prochain commit.
Supprimer et Retirer Plusieurs Fichiers
Vous pouvez Ă©galement appliquer git rm Ă plusieurs fichiers en mĂȘme temps :
git rm <fichier1> <fichier2> ...Utiliser des Motifs pour Supprimer des Fichiers
Pour supprimer tous les fichiers correspondant Ă un certain motif, par exemple
tous les fichiers .log, utilisez :
git rm '*.log'Enregistrer des modifications (commit)
Pour enregistrer des modifications dans lâhistorique de votre dĂ©pĂŽt Git, vous
utilisez la commande git commit. AprĂšs avoir ajoutĂ© vos modifications Ă
lâindex avec git add, vous pouvez crĂ©er un commit pour capturer lâĂ©tat actuel
de ces fichiers dans votre dépÎt. Voici comment procéder :
Créer un Commit Simple
Pour créer un commit avec un message, utilisez :
git commit -m "Votre message de commit ici"Remplacez "Votre message de commit ici" par une description concise de vos
modifications. Par exemple :
git commit -m "Ajout de la fonctionnalité de connexion utilisateur"Ajouter et Commiter en une seule commande
Si vous avez des modifications qui sont dĂ©jĂ suivies par Git (câest-Ă -dire des fichiers qui ont Ă©tĂ© ajoutĂ©s Ă lâindex lors de commits prĂ©cĂ©dents), vous pouvez les ajouter Ă lâindex et les commiter en une seule commande :
git commit -am "Votre message de commit ici"Modifier le Dernier Commit
Si vous avez oubliĂ© dâajouter des changements Ă votre dernier commit ou si vous voulez changer le message de commit, vous pouvez le modifier avec :
git commit --amendCela ouvrira un éditeur pour vous permettre de modifier le message de commit. Si
vous avez de nouvelles modifications Ă ajouter au mĂȘme commit, ajoutez-les
dâabord avec git add, puis utilisez git commit --amend.
Créer un Commit Vide
Dans certains cas, vous pourriez vouloir créer un commit sans aucun changement (pour déclencher un processus CI/CD, par exemple). Utilisez pour cela :
git commit --allow-empty -m "Votre message de commit ici"VĂ©rifier lâĂtat des Commits
AprĂšs avoir committĂ©, vous pouvez vĂ©rifier lâĂ©tat de vos commits par rapport au dĂ©pĂŽt distant avec :
git statusEt pour voir lâhistorique des commits :
git logChaque commit dans Git représente un ensemble de modifications et est identifié par un identifiant unique (SHA-1). Le message de commit est important pour comprendre le contexte des modifications apportées. Assurez-vous donc que vos messages de commit sont clairs et descriptifs.
Envoyer et tirer des modifications
Lâenvoi (push) et la rĂ©ception (pull) de modifications sont des opĂ©rations importantes dans lâutilisation de Git, surtout lorsquâon travaille Ă plusieurs sur un projet. Ces commandes permettent de synchroniser les changements entre votre dĂ©pĂŽt local et le dĂ©pĂŽt distant (comme GitHub ou GitLab).
Tirer des Modifications (Git Pull)
Pour récupérer et fusionner les modifications depuis le dépÎt distant vers votre
dépÎt local, utilisez git pull. Voici comment :
-
Tirer les modifications : La commande de base pour tirer les modifications est :
Terminal window git pull <remote> <branche>Par exemple :
Terminal window git pull origin mainCela récupÚre les modifications de la branche
maindu dépÎt distantoriginet les fusionne avec votre branche localemain. -
RĂ©soudre les conflits : Si des modifications ont Ă©tĂ© faites Ă la fois dans votre dĂ©pĂŽt local et dans le dĂ©pĂŽt distant sur les mĂȘmes lignes de code, des conflits peuvent survenir. Git vous demandera de rĂ©soudre ces conflits avant de pouvoir complĂ©ter lâopĂ©ration de pull.
Envoyer des Modifications (Git Push)
AprĂšs avoir commitĂ© vos modifications, vous pouvez les envoyer (push) vers un dĂ©pĂŽt distant pour les partager avec dâautres. Voici comment faire :
-
Vérifier le dépÎt distant : Avant de pousser vos changements, assurez-vous de connaßtre le dépÎt distant avec lequel vous travaillez. Utilisez :
Terminal window git remote -vCela vous montrera les URLs des dépÎts distants associés à votre dépÎt local.
-
Envoyer les modifications : Pour pousser vos commits sur la branche courante vers le dépÎt distant, utilisez :
Terminal window git push <remote> <branche>OĂč
<remote>est le nom du dépÎt distant (souventorigin) et<branche>est le nom de votre branche. Par exemple :Terminal window git push origin mainEnvoie les modifications de la branche locale
mainvers la branchemaindu dépÎt distantorigin.
Remiser des modifications (stash)
git stash est une fonctionnalité de Git qui permet de mettre de cÎté
temporairement (ou âstashâ) les modifications en cours dans votre rĂ©pertoire de
travail, sans avoir Ă effectuer un commit. Cette fonction est utile dans
plusieurs scénarios, tels que le besoin de basculer rapidement entre les
branches sans vouloir commiter le travail en cours. Voici comment git stash
fonctionne et comment lâutiliser :
-
Mettre de CÎté des Modifications : Quand vous utilisez
git stash, Git prend les modifications en cours dans votre rĂ©pertoire de travail (modifications indexĂ©es et non indexĂ©es) et les sauvegarde dans une zone temporaire. Votre rĂ©pertoire de travail revient alors Ă lâĂ©tat du dernier commit. -
Liste de Stash : Vous pouvez avoir plusieurs stashes enregistrĂ©s en mĂȘme temps. Git les stocke dans une pile (stack), oĂč le dernier stash est en haut de la pile.
Utilisation de Base
-
Créer un Stash : Pour mettre de cÎté vos modifications actuelles, utilisez :
Terminal window git stashVous pouvez aussi lui donner un nom avec :
Terminal window git stash save "nom_du_stash" -
Lister les Stashes : Pour voir tous les stashes que vous avez créés, utilisez :
Terminal window git stash list -
Appliquer le Dernier Stash : Pour réappliquer les modifications du dernier stash (et le supprimer de la pile), utilisez :
Terminal window git stash popSi vous voulez réappliquer les modifications sans supprimer le stash, utilisez
git stash apply. -
Supprimer un Stash : Pour supprimer le dernier stash de la pile, utilisez :
Terminal window git stash dropPour supprimer un stash spécifique, utilisez
git stash drop stash@{numĂ©ro}oĂč{numĂ©ro}est lâindex du stash dans la liste.
ScĂ©narios dâUtilisation
- Basculer entre les Branches : Si vous ĂȘtes en train de travailler sur une
branche et devez rapidement passer Ă une autre pour une tĂąche urgente, vous
pouvez utiliser
git stashpour mettre de cÎté vos modifications actuelles, changer de branche, puis les réappliquer plus tard. - Nettoyer le Répertoire de Travail : Si vous voulez revenir à un état de
répertoire propre, sans perdre les modifications en cours,
git stashest une bonne solution.
Fusion de branches
Le merge (fusion) de branches dans Git est un processus clĂ© pour intĂ©grer les modifications dâune branche dans une autre. Cette opĂ©ration est couramment utilisĂ©e pour combiner les modifications de dĂ©veloppement dans une branche principale ou de fonctionnalitĂ©s. Voici comment cela fonctionne et comment lâeffectuer :
Fonctionnement du Merge
-
Objectif : Le merge permet de prendre les commits dâune branche et de les intĂ©grer dans une autre. Cela crĂ©e un nouveau commit dans la branche cible qui contient les modifications des deux branches.
-
Fast-Forward Merge : Si la branche cible nâa pas de commits divergents depuis la crĂ©ation de la branche source, Git effectuera un âfast-forward mergeâ. Cela signifie que Git met simplement Ă jour la tĂȘte de la branche cible pour pointer vers le dernier commit de la branche source.
-
Three-Way Merge : Si des modifications ont Ă©tĂ© apportĂ©es sur les deux branches depuis leur divergence, Git effectue un âthree-way mergeâ. Git crĂ©e un nouveau commit qui combine les changements des deux branches. Ce commit a deux parents : le dernier commit de chaque branche.
Effectuer un Merge
-
Se Positionner sur la Branche Cible : Avant de faire un merge, assurez-vous dâĂȘtre sur la branche dans laquelle vous voulez intĂ©grer les changements. Par exemple, si vous voulez fusionner une branche de fonctionnalitĂ© dans
main, vous devriez dâabord vous positionner surmain:Terminal window git checkout main -
Fusionner la Branche Source : Ensuite, fusionnez la branche source dans la branche actuelle (cible) en utilisant :
Terminal window git merge <nom_de_la_branche_source>Par exemple, pour fusionner une branche appelée
featuredansmain, utilisez :Terminal window git merge feature
Résolutions de conflits
La rĂ©solution de conflits dans Git est un aspect important lorsquâil sâagit de collaborer sur des projets de code. Les conflits surviennent gĂ©nĂ©ralement lorsquâil y a des modifications contradictoires dans une mĂȘme partie dâun fichier sur diffĂ©rentes branches ou lorsquâune personne a modifiĂ© un fichier qui a Ă©tĂ© simultanĂ©ment modifiĂ© par quelquâun dâautre sur le dĂ©pĂŽt distant. Voici les Ă©tapes pour gĂ©rer et rĂ©soudre ces conflits :
Identifier les Conflits
AprÚs une tentative de fusion (git merge) ou de récupération (git pull), Git
vous informe sâil y a des conflits. Les conflits doivent ĂȘtre rĂ©solus
manuellement.
Comprendre les Marqueurs de Conflit
Dans les fichiers concernés, Git insÚre des marqueurs de conflit qui aident à visualiser la portion de code en conflit. Ces marqueurs se présentent comme suit :
<<<<<<< HEADmarque le dĂ©but des modifications de votre branche.=======sĂ©pare vos modifications de celles provenant de la branche avec laquelle vous fusionnez.>>>>>>> <nom de la branche>marque la fin des modifications de lâautre branche.
Par exemple :
<<<<<<< HEAD// Votre code ici=======// Code de l'autre branche>>>>>>> feature-branchRésoudre les Conflits
Ouvrez les fichiers en conflit dans votre Ă©diteur de texte ou IDE et dĂ©cidez manuellement de garder, modifier ou fusionner les parties en conflit. Vous pouvez choisir de garder les modifications de votre branche, celles de la branche distante, ou les combiner dâune maniĂšre qui a du sens pour votre projet.
Marquer les Conflits Comme Résolus
Une fois que vous avez modifié le fichier et résolu les conflits, vous devez marquer ces conflits comme résolus. Pour ce faire, utilisez la commande :
git add <nom_du_fichier>Cela nâeffectue pas de commit mais signale Ă Git que les conflits dans
<nom_du_fichier> ont été résolus.
Finaliser la Fusion
AprĂšs avoir rĂ©solu tous les conflits et les avoir ajoutĂ©s Ă lâindex, vous pouvez finaliser la fusion avec un commit. Utilisez :
git commitGit ouvrira un éditeur de texte pour que vous puissiez saisir un message de commit pour la fusion. Habituellement, un message par défaut est déjà préparé pour indiquer une fusion.
Tester les Modifications
Avant de considérer la fusion comme complÚte, testez votre code pour vous assurer que les modifications fusionnées fonctionnent comme prévu.
Conseils
- Utilisez des outils de rĂ©solution de conflits : Certains IDEs et outils GUI pour Git offrent des interfaces visuelles pour aider Ă la rĂ©solution des conflits, ce qui peut ĂȘtre plus intuitif que de le faire directement via la ligne de commande.
- Communiquez avec votre Ă©quipe : Si le conflit est complexe ou implique des choix stratĂ©giques, discutez-en avec les membres de lâĂ©quipe impliquĂ©s pour dĂ©cider de la meilleure façon de procĂ©der.
- Pratiquez des commits réguliers et des mises à jour fréquentes : Cela minimise le risque de conflits importants, rendant leur résolution plus gérable.
La résolution de conflits peut sembler intimidante au début, mais avec de la pratique, elle devient une partie naturelle du travail avec Git dans un environnement collaboratif.
Résumé
Voici résumé le fonctionnement des commandes git. (Merci L.Destailleur)

Notions sur HEAD
Dans Git, HEAD est une référence symbolique au dernier commit sur la branche
courante dans votre dĂ©pĂŽt local. En dâautres termes, câest le commit sur lequel
vous travaillez actuellement.
HEAD change dynamiquement lorsque vous changez de branche ou lorsque vous
faites un nouveau commit. Il pointe toujours vers le dernier commit de la
branche courante.
En utilisant la commande git log, vous pouvez voir oĂč HEAD est actuellement
pointé. Le commit sur lequel HEAD pointe est généralement marqué en haut de la
liste des commits.
git log
commit 2790a912332c139e5f916ed8833eb82dbdd34724 (HEAD -> dev, origin/dev, feature-nouvelle)Author: Stéphane ROBERT <robert.stephane.28@gmail.com>Date: Tue Dec 12 15:31:18 2023 +0100
correctionHEAD peut ĂȘtre utilisĂ© pour naviguer dans lâhistorique de votre dĂ©pĂŽt. Par
exemple, HEAD~1 réfÚre au commit précédent celui sur lequel HEAD est
actuellement pointé.
La commande git reset utilise souvent HEAD. Par exemple, git reset --hard HEAD réinitialise votre espace de travail au dernier commit, supprimant toutes
les modifications non commitées.
Un Ă©tat de âHEAD dĂ©tachĂ©â se produit lorsque HEAD pointe directement sur un
commit spĂ©cifique et non sur le dernier commit dâune branche. Cela peut arriver
lorsque vous checkout un commit spécifique ou un tag. En état de HEAD détaché,
les commits que vous créez ne sont rattachés à aucune branche. Si vous changez
de branche sans créer une nouvelle branche à partir de ce point, ces commits
peuvent devenir âorphelinsâ et difficiles Ă retrouver.Pour sortir de cet Ă©tat,
vous pouvez checkout une branche existante ou en créer une nouvelle à partir du
commit sur lequel le HEAD détaché pointe.
Bonnes Pratiques
- VĂ©rifiez lâĂ©tat de votre dĂ©pĂŽt : Utilisez
git statusrĂ©guliĂšrement pour vĂ©rifier lâĂ©tat de votre dĂ©pĂŽt local et voir si des modifications nĂ©cessitent un commit ou un push. - Commits frĂ©quents, Pushs rĂ©flĂ©chis : Faites des commits petits et frĂ©quents pour un meilleur suivi des modifications, mais poussez les changements vers le dĂ©pĂŽt distant aprĂšs avoir vĂ©rifiĂ© et testĂ© vos modifications localement.
Ces commandes constituent la base de la collaboration et de la gestion de versions dans Git, permettant une synchronisation efficace entre les diffĂ©rents contributeurs dâun projet.
Plus dâinfos
Je ne vais pas tout documenter, donc si vous voulez plus dâinformations voici un quelques liens.
Liens
Livres gratuits
- Git Magic â
- Pro Git â Le livre officiel
- Apprenez Git â
Vidéos
- xavki â 35 vidĂ©os