Table des matières

Branches

On peut travailler sur plusieurs branches en parallèle. Par défaut l'unique branche est “master”.

Gestion basique des branches

Commandes principales

Le plus simple :

git branch       #list existing branches and point the current one
git branch A     #create a new branch

Changer de branche (le contenu du dossier local sera celui de la branche) :

git checkout A   #work on branch A

Créer une nouvelle branche issue de l'actuelle et travailler directement dessus

git checkout -b hotfix

Fusionner le contenu d'une branche (ici, hotfix) dans la branche courante (ici, master) :

git checkout master
git merge hotfix

Il ne reste plus qu'à supprimer la branche devenue inutile :

git branch -d hotfix

Test de fusion

Effectuer un merge à blanc :

git merge --no-commit --no-ff <branch-name>

Retour arrière :

git merge --abort

Précisions sur la fusion

Si on fusionne avec une branche qui avait juste quelques commits de plus, il se passe juste un “fast-forward”, sans risque. Par contre si chacune des 2 branches divergent (ont eu des commits différents), la fusion est un peu plus complexe, et peut révéler des confilts.

Conflits

Si, lors d'une fusion, un conflit apparait, les fichiers concernés comporteront un ou plusieurs passages de la forme :

<<<<<<< HEAD:fichier.txt
Version 1
=======
Version 2
>>>>>>> prob53:fichier.txt

En ce cas, la version du haut est celle de HEAD, donc de la branche actuellement extraite, et celle du bas vient de la branche qu'on tente de fusionner dans la branche courante.

Modifier le fichier pour faire la fusion “manuellement”, puis lancer git add pour résoudre le conflit.

Autre solution : git mergetool

En vrac

Diverses commandes utiles

#list existing branches with last action in each
git branch -v
#list branches that were already merge with the current branch
git branch --merged
#list branches that have unmerged work compared to current branch
git branch --no-merged
#create local branch from existing remote branch
git checkout -b C remoteName/C
 
#delete branch on remote repository
git push remoteName :C
#same syntax as pushing the local branch to the remote
git push remoteName C:C