====== 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 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