branches

http://git-scm.com/book/fr/v1/Les-branches-avec-Git

La gestion des branches avec Git est considérée comme performante et simple. Les branches permettent de développer plusieurs aspects simultanément et indépendamment les uns des autres.

Qu est ce qu une branche ?

Une branche est un historique de travail parallèle et indépendant du travail principal. Une branche démarre à un point de divergence avec une autre dans l'arbre des commits. Une fois que l'on a divergé, on peut continuer à produire des commits dans la branche sur laquelle on se trouve. On peut aussi récupérer des commits provenant d'autres branches et ainsi produire un commit fils de la branche locale et de l'autre branche.

Utilisation basique

Les opérations principales associées aux branches sont : brancher et fusionner.

brancher

Brancher signifie créer une branche.

git branch nouvellebranche

Pour ensutie se déplacer sur la branche "nouvellebranche" :

git checkout nouvellebranche

Souvenez vous que la commande "git checkout" permet de se déplacer entre les branches.

fusionner

Une fusion s'effectue entre une branche courante et une branche à fusionner. Une fusion signifie une réunion de deux branches à travers un commit fils de ces deux branches. Si les deux branches ne sont pas divergentes, la branche courante (dans laquelle on fusionne l'autre) va juste déplacer son pointeur vers le commit le plus récent entre les deux branches qui fusionnent.

Une fusion ne signifie pas un abandon de la branche avec laquelle on fusionne. Après une fusion, les deux branches fusionnées peuvent continuer à évoluer indépendamment. Elles ont simplement convergé à un moment précis de leur historique.

Si je suis dans ma branche master

git checkout master

et que je souhaite fusionner avec la branche "nouvellebranche" :

git merge nouvellebranche

Une fusion peut déclencher des conflits si les modifications apportées dans les deux branches ne sont pas indépendantes. Par exemple, si on part d'un fichier dont l'état au moment de la divergence entre master et nouvellebranche était :

première ligne
deuxième ligne
troisième ligne

et que son état dans la branche master devient :

première ligne
deuxième ligne modifiée par master
troisième ligne

alors que son état dans la branche nouvellebranche est :

première ligne
deuxième ligne modifiée par nouvellebranche
troisième ligne

Git ne peut pas fusionner automatiquement car la deuxième ligne du fichier pose problème, les modifications des deux branches sont conflictuelles et Git ne peut pas choisir entre une modification plutôt qu'une autre. On rentre donc dans une résolution de conflit comme décrit dans ce chapitre.

Différentes manières de travailler avec les branches

Basiquement on peut dire que tout développement indépendant doit être effectué dans une branche. De cette manière il ne perturbe pas le développement principal. Par exemple, on peut rendre instable le projet dans une branche et attendre d'avoir terminé proprement la fonctionnalité pour fusionner avec master. On peut aussi placer une idée à explorer dans une branche, même si elle sera abandonnée au final, c'est à dire non fusionnée.

Il existe plusieurs modèles d'utilisation des branches :

http://git-scm.com/book/fr/v1/Les-branches-avec-Git-Travailler-avec-les-branches