|
@@ -8,80 +8,159 @@ output:
|
|
|
|
|
|
# Branches
|
|
|
|
|
|
-Lorsque l'on travaille sur un dépôt, on réalise des commits successifs. Git
|
|
|
-permet également, à partir d'un commit donné, de réaliser plusieurs branches de
|
|
|
-commits en parallèle. Ceci permet de faire une série de modifications sans
|
|
|
-risquer de perturber la branche principale du projet, utilisée par tout le
|
|
|
-monde. Une branche peut ensuite être fusionnée dans une autre, par exemple
|
|
|
-dans la branche principale, pour y intégrer ses modifications une fois
|
|
|
-abouties. Si les modifications n'ont pas abouties, la branche peut être
|
|
|
-abandonnée ou même supprimée.
|
|
|
+Lorsque l'on crée successivement des commits, ceux-ci sont ajoutés les uns à la
|
|
|
+suite des autres, sur une même branche. Git permet également, à partir d'un
|
|
|
+commit donné, de réaliser plusieurs branches en parallèle. Les branches
|
|
|
+peuvent ensuite être fusionnées, abandonnées ou même supprimées.
|
|
|
|
|
|
L'utilisation des branches est très naturelle avec git et permet d'organiser le
|
|
|
-déroulement du projet. Souvent, on utilise une branche master qui "doit
|
|
|
-toujours fonctionner"; pour chaque fonctionnalité à ajouter, on dérive une
|
|
|
-nouvelle branche que l'on fusionne ensuite dans le master une fois la
|
|
|
+déroulement du projet. Souvent, on utilise une branche principale "master" qui
|
|
|
+"doit toujours fonctionner" et, pour chaque fonctionnalité à ajouter, on dérive
|
|
|
+une nouvelle branche que l'on fusionne ensuite dans le master une fois la
|
|
|
fonctionnalité réalisée (ou partiellement réalisée) et testée.
|
|
|
|
|
|
![](branches_01.svg)
|
|
|
|
|
|
## Afficher les branches
|
|
|
+
|
|
|
+La commande `git branch` permet d'afficher les branches.
|
|
|
+
|
|
|
![](branches_01.png)
|
|
|
|
|
|
-git log --graph --all --oneline --decorate
|
|
|
+On peut avoir plus d'information avec la commande `git log --graph --all --oneline --decorate`.
|
|
|
+
|
|
|
+![](branches_21.png)
|
|
|
+
|
|
|
+![](branches_02.svg)
|
|
|
|
|
|
## Créer une nouvelle branche locale
|
|
|
+
|
|
|
+La command `git branch ...` permet de créer de nouvelles branches.
|
|
|
+
|
|
|
![](branches_02.png)
|
|
|
|
|
|
+![](branches_03.svg)
|
|
|
+
|
|
|
## Changer de branche
|
|
|
+
|
|
|
+La commande `git checkout ...` permet de sélectionner une branche.
|
|
|
+
|
|
|
![](branches_03.png)
|
|
|
|
|
|
+![](branches_04.svg)
|
|
|
+
|
|
|
+Les nouveaux commits sont alors effectués pour la branche sélectionnée.
|
|
|
+
|
|
|
![](branches_05.png)
|
|
|
|
|
|
-## Fusionner des branches
|
|
|
+![](branches_05.svg)
|
|
|
+
|
|
|
+Le master est une branche comme les autres qu'on peut également sélectionnée.
|
|
|
|
|
|
![](branches_06.png)
|
|
|
+
|
|
|
+![](branches_06.svg)
|
|
|
+
|
|
|
+## Fusionner des branches
|
|
|
+
|
|
|
+Pour fusionner des branches, il faut d'abord sélectionner la branche qui doit
|
|
|
+recevoir les modifications puis utiliser la commande `git merge`.
|
|
|
+
|
|
|
![](branches_08.png)
|
|
|
+
|
|
|
+![](branches_07.svg)
|
|
|
+
|
|
|
+Un nouveau commit, correspondant à la fusion est alors créé. On peut le
|
|
|
+vérifier avec un `git log`...
|
|
|
+
|
|
|
![](branches_09.png)
|
|
|
+
|
|
|
+... ou avec un client graphique.
|
|
|
+
|
|
|
![](branches_10.png)
|
|
|
|
|
|
## Envoyer une branche sur un dépôt distant
|
|
|
+
|
|
|
+Lorsque l'on crée une branche, celle-ci est locale au dépôt. Pour la créer et
|
|
|
+l'envoyer également sur le serveur, il faut utiliser la commande `git push
|
|
|
+--set-upstream ...`. Ainsi, la branche locale et la branche distante seront
|
|
|
+associées et il suffira ensuite d'un push classique de la branche locale pour
|
|
|
+l'envoyer sur le serveur.
|
|
|
+
|
|
|
![](branches_11.png)
|
|
|
+
|
|
|
+![](branches_08.svg)
|
|
|
+
|
|
|
+On peut également voir sur le site gogs que la branche a bien été créée sur le
|
|
|
+serveur.
|
|
|
+
|
|
|
![](branches_12.png)
|
|
|
|
|
|
## Afficher les branches distantes
|
|
|
+
|
|
|
+La commande `git ls-remote` permet de lister les branches distantes.
|
|
|
+
|
|
|
![](branches_15.png)
|
|
|
|
|
|
## Terminer une branche locale
|
|
|
-![](branches_13.png)
|
|
|
+
|
|
|
+Pour terminer une branche locale (c'est-à-dire supprimer l'étiquette
|
|
|
+correspondante), il faut d'abord sélectionner une autre branche...
|
|
|
+
|
|
|
+![](branches_13a.png)
|
|
|
+
|
|
|
+![](branches_09.svg)
|
|
|
+
|
|
|
+... puis utiliser la commande `git branch -d ...`.
|
|
|
+
|
|
|
+![](branches_13b.png)
|
|
|
+
|
|
|
+![](branches_10.svg)
|
|
|
|
|
|
## Terminer une branche distante
|
|
|
+
|
|
|
+Pour terminer une branche distante (c'est-à-dire supprimer l'étiquette
|
|
|
+correspondante), il faut utiliser la commande `git push --delete ...`
|
|
|
+
|
|
|
![](branches_16.png)
|
|
|
|
|
|
-## Supprimer un commit déjà pushé (DANGER !!!)
|
|
|
-git reset --hard e6c8e8e
|
|
|
-git push origin HEAD:master -f
|
|
|
-git reset --hard e6c8e8e
|
|
|
+![](branches_11.svg)
|
|
|
|
|
|
-![](branches_18.png)
|
|
|
+## Supprimer un commit déjà pushé (DANGER !!!)
|
|
|
|
|
|
+Généralement, vouloir supprimer un commit déjà envoyé sur le serveur est une
|
|
|
+mauvaise idée. En effet, en plus de perdre les données sauvegardées, cela peut
|
|
|
+casser les commits d'un collègue qui aurait déjà récupéré et continué les
|
|
|
+commits en question, donc il vaut mieux committer des corrections.
|
|
|
|
|
|
-TODO : supprimer
|
|
|
+Mais si c'est vraiment ce que vous voulez faire, voici la procédure (pensez
|
|
|
+à vérifier que les commits locaux sont également supprimés sinon les commits
|
|
|
+supprimés sur le serveur seront de nouveau envoyés au prochain push).
|
|
|
|
|
|
-![](branches_17.png)
|
|
|
-![](branches_21.png)
|
|
|
+![](branches_18.png)
|
|
|
|
|
|
## Résumé et méthode de travail
|
|
|
|
|
|
Résumé des commandes git précédentes :
|
|
|
|
|
|
---|---|
|
|
|
-`git ` | |
|
|
|
+`git branch` | TODO |
|
|
|
+`git log --graph --all --oneline --decorate` | |
|
|
|
+`git ls-remote` | |
|
|
|
+`git branch ...` | |
|
|
|
+`git checkout ...` | |
|
|
|
+`git merge ...` | |
|
|
|
+`git push --set-upstream ...` | |
|
|
|
+`git branch -d ...` | |
|
|
|
+`git push --delete ...` | |
|
|
|
|
|
|
Quelques conseils de méthode de travail :
|
|
|
|
|
|
-- TODO
|
|
|
-
|
|
|
+- utilisez une branche master "qui marche"
|
|
|
+- pour chaque tâche du projet, créez une branche dédiée, que vous fusionnerez
|
|
|
+ dans le master une fois la tâche réalisée.
|
|
|
+- utiliser des branches ne vaccine pas contre les conflits, donc pensez à faire
|
|
|
+ quand même le point avec vos collègues régulièrement.
|
|
|
|
|
|
## Exercice
|
|
|
|