Ceci est une ancienne révision du document !
Git : fonctionnalités avancées
Pour pouvoir utiliser pleinement Git, il peut être utile de s'approprier la notion de branches. Une branche est une fonctionnalité ou une option que l'on souhaite ajouter et tester sans quelle vienne pour l'instant impacter le coeur du projet.
1. Création de branches
On crée une nouvelle branche au projet, à partir de la branche master
git branch nouvellebranche
On passe sur la branche nouvellebranche
git checkout nouvellebranche
ou plus directement :
git checkout -b nouvellebranche
On peut faire des commits (git add & git commit) sur cette branche. On peut aussi repasser sur la branche principale et en faire d'autres.
git checkout master
Il est aussi possible de venir se placer sur un commit, une branche ou un tag précédent :
git checkout nomcommit git checkout vieillebranche git checkout nomtag
(Voir git checkout -h)
2. Fusion de branche (merge)
On repasse sur la branche master
git checkout master
Et on fusionne la branche souhaitée vers la branche en cours (master)
git merge nouvellebranche
Puis on peut supprimer la branche en cours :
git branch -d nouvellebranche # Si status est à jour ou git branch -D nouvellebranche # si pas fusionnée
Gestion de conflits
En cas de merge conflictuel, il faut résoudre le confilt en éditant les fichiers fusionnés qui contiennent les diff.
Il faut éditer les fichiers en conflit et finir avec un :
git add fichiers_en_conflit
git commit
Il est possible d'utiliser des outils comme :
git mergetool fichier_en_conflit
Il est possible de merger sans créer de nouveau commit :
git merge --no-commit nouvellebranche
Puis modifier/corriger les fichiers et enfin d'ajouter et de commiter les changements manuellement
Il est alors aussi possible d'annuler un merge avec un :
git merge --abort
Travail collaboratif
Récupérer un dépot distant avec :
git clone url_distant
Dans ce cas, l'origine du dépot distant est mémorisé dans “origin”.
git fetch permet de récupérer les branches distantes. Attention, git pull ⇔ git fetch
git pull # récupère les sources et merge les différences git fetch # récupère les sources sans fusionner
git pull = git fetch + git merge FETCH_HEAD
Pour voir les différences avec le dépot distant :
git remote -v git branch -r # pour voir les branches distantes connues localement git branch -vv # si la branche loclae est trackée