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.
- Si aucun conflit, un nouveau commit est créé sur la branche de destination, rassemblant les commits spécifiques de la branche source
- Si un conflit au moins est détecté, une tentative de merge est faite en local, et c'est au développeur de corriger le conflit avant de le commiter (voir plus bas)
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