Les branches, c’est ce qui permet de travailler sur plusieurs versions à la fois.
Créer une branche
Pour voir les banches :
$ git branch
La branche principale s’appelle master
.
Une étoile indique la branche sur laquelle on est.
Pour créer une branche :
$ git branch une_branche
Se déplacer sur la branche :
$ git checkout une_branche
De même :
$ git checkout master
On peut aussi créer la branche et s’y mettre en une seule commande :
$ git checkout -b une_autre_branche
Pour envoyer la branche sur le dépôt central :
$ git push origin une_branche
Récupérer une branche
Si on souhaite récupérer une copie locale d’une branche du dépôt pour travailler dessus :
$ git checkout -b branche origin/branche
On peut avoir besoin de se synchroniser pour que la branche soit connue localement avant de lancer le commande précédente en faisant :
$ git fetch origin
Il faut noter que le nom local n’a pas besoin d'être le même que le nom distant, mais c’est juste plus pratique.
Après cette commande, les branches locales et
distantes seront associées, c’est-à-dire que les commandes telles que push
et pull
se feront automatiquement dans la bonne branche
sans avoir besoin de la préciser.
Fusionner des branches
Pour fusionner des branches, on se place par exemple sur master
et on fusionne l’autre branche :
$ git checkout master
$ git merge une_branche
Bien sur, quand on travaille sur une branche, on peut aussi faire le contraire
pour récupérer ce qui est modifié dans master
:
$ git checkout une_branche
$ git merge master
Et ça marche avec n’importe quelles branches, vu que master
n’est la branche
principale que par convention, et qu’elle n’a rien de particulier…
Résoudre un conflit
Quand on fait le merge, et qu’il n’arrive pas à résoudre une différence, il signale le(s) fichier(s) où il y a des problème. Il faut alors l'éditer et résoudre le conflit manuellement. Il faut ensuite lui signaler avec :
$ git commit
Il faut noter que dans ce cas, il y a un message de merge par défaut. On peut ajouter des informations au message par défaut si la fusion est délicate. Il est néanmoins intéressant de garder la base du message par défaut qui est facilement reconnaissable.
Déplacer un bout de branche
Situation de départ :
o--o--o--o--o A
\
o--o--o--o--o B
\
o--o--o C
On veut déplacer la branche C sur A (elle ne dépend pas de B). Il faut faire :
$ git rebase --onto A B C
Et on obtient :
o--o--o--o--o A
| \
| o'--o'--o' C
\
o--o--o--o--o B
Attention : quand on utilise rebase
, il faut utiliser l’option -f
de
push
car on a modifié les numéros de commit. Ne pas faire ça sur un
dépôt public utilisé par d’autres (éventuellement ok dans une pull request).
Effacer une branche
Pour effacer une branche en local :
$ git branche -d branche
ou :
$ git branche -D branche
pour forcer l’effacement si la branche n’a pas été fusionnée.
Pour effacer une branche sur un dépôt :
$ git push origin :branche
A partir de git 1.7, il semble qu’il y ait une syntaxe un peu plus claire pour faire la même chose :
$ git push origin --delete branche
Renommer une branche
Pour renommer une branche en local :
$ git branch -m branche meilleur-nom
ou :
$ git branch -M branche meilleur-nom
pour forcer le renommage si la branche n’a pas été fusionnée.
Si on souhaite aussi renommer la branche sur un dépôt, le plus simple est de la renommer en local, effacer la branche sur le dépôt, et pousser la branche :
$ git branch -m branche meilleur-nom
$ git push origin --delete branche
$ git push --set-upstream origin meilleur-nom
Voir aussi :
- Git : déménagement d'un dépôt
- Git rebase : pour diviser un commit
- Git submodule
- Git : pour extraire de l'information
- Git bisect : pour trouver l'origine d'une régression
- Git tag : pour nommer des versions
- Git archive : exporter du contenu
- Git subtree : créer un nouveau dépôt à partir du répertoire d'un autre dépôt
- Git : au sujet des pull requests
- Git : comment corriger des erreurs
- Git diff : voir les différences
- Git clean : grand nettoyage
- Git : aide mémoire de base
- Afficher un pourcentage dans une page HTML
- VNC : Virtual Network Computing
- Git : déménagement d'un dépôt
- Quelques liens au sujet de l'analyse statique
- Ocaml: mon principal langage de développement
- Disque dur externe
- Les profiles dans Firefox
- Cryptographie et mail sous Android
- Quelques liens au sujet du C
- Git rebase : pour diviser un commit