{{tag>git dev branches todo}} ====== Gestion des branches avec git ====== Le HEAD est le pointeur sur le dernier commit de la branche courante. La commande **git branch** liste les branches existantes et marque d'une astérisque la branche courante: # lister les branches git branch # Afficher seulement le nom de la branche courante git branch --show-current # lister les branches non fusionnées # avec la branche courante git branch --no-merged # lister les branches fusionnées avec # avec la branche courante git branch --merged # Lister les branches fusionnées # avec la branche 'testing' git branch --merged testing # Lister toutes les branches git branch --all ===== Créer une branche ===== Généralement on souhaite créer la branche et basculer dessus : git checkout -b issue33 # Equivalent git switch --create issue33 ===== Branches locales et distantes ===== Lors d'un clonage de dépot, la branche master du serveur en amont est référencée par **origin/master**. La branche master locale est automatique définie comme suivant cette branche. on parle de branche de suivi (tracking branch) et la branche qu'elle suit est dite branche amont (upstream branch). Le temps passant si des collaborateurs ont poussé des modifications sur le serveur nous n'en avons pas connaissance. Pour mettre à jour notre dépôt, on récupère les modifications apportées sur le dépôt distant via un fetch: # Récupérer les modifications disponibles # sur le dépot en amont nommé "origin" git fetch origin # Récupère les modifications sur le serveur # amont yoann git fetch yoann Les modifications apportées par les collaborateurs sont ajoutées dans notre dépot mais ne sont pas intégrées à notre branche locale master. Pour ce faire il faudra faire un merge de origin/master sur la branche locale master. Lorsqu'on est positionné sur une branche suivie, on peut faire référence à la branche amont via *{@upstream}** ou **{@u}**. Par exemple en étant positionné sur master, si l'on souhaite fusionner les modification apportées sur la branche amont origin/master (récupérées précédemment par un fetch), les trois commandes ci-dessous sont équivalentes: git merge origin/master # Equivalent git merge {@upstrem} # Equivalent git merge {@u} Pour apporter des modifications sur une branche du serveur amont il faut créer une branche locale paramétrée pour suivre la branche amont # Création d'une branche locale qui suit la # branche amont "feature01" git checkout -b feature01 origin/feauture01 # Equivalent $ git branch --track origin/feature01 La commande précédente aboutie à la création d'une branche locale nommée 'feature01' ayant pour branche amont 'origin/feature01'. On peut alors se positionner sur la branche locale "feature01" apporter les modifications souhaitées et enfin pousser sur le serveur distant quand le moment est venu. L’extraction d’une branche locale à partir d’une branche distante crée automatiquement ce qu’on appelle une "branche de suivi" (tracking branch) et la branche qu’elle suit est appelée "branche amont" (upstream branch). Les branches de suivi sont des branches locales qui sont en relation directe avec une branche distante. Si vous vous trouvez sur une branche de suivi et que vous tapez git push, Git sélectionne automatiquement le serveur vers lequel pousser vos modifications. # Crée automatiquement une branche locale de suivi de "origin/hotfix41" git checkout hotfix41 Pour afficher les branches de suivi configurées dans le dépôt courant : git fetch --all git branch -a -vv ===== Pousser une branche sur le serveur Amont ===== Lorsqu'on crée une branche elle n'existe que localement. Si on souhaite pousser les commits portés par cette branche sur le serveur amont, il faut le faire explicitement : # Pousse la branche locale "feature02" sur le serveur amont "origin" git push --set-upstream origin feature02 ===== Supprimer des branches ===== Pour supprimer une branche locale "feature02": git branch -d feature02 Pour supprimer une branche distante "feature33" présente sur le serveur amont "origin" : git push origin --delete feature33 ===== Labels standards ===== ^ proposed, pu (proposed update), feature | Ajout de fonctionnalité | ^ issue, iss, hotfix | Correction |