|
@@ -8,15 +8,15 @@ output:
|
|
|
|
|
|
# Branches
|
|
# Branches
|
|
|
|
|
|
-Lorsque l'on crée successivement des commits, ceux-ci sont ajoutés les uns à la
|
|
|
|
|
|
+Lorsque l'on fait des commits successifs, ceux-ci sont ajoutés les uns à la
|
|
suite des autres, sur une même branche. Git permet également, à partir d'un
|
|
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
|
|
commit donné, de réaliser plusieurs branches en parallèle. Les branches
|
|
peuvent ensuite être fusionnées, abandonnées ou même supprimées.
|
|
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
|
|
L'utilisation des branches est très naturelle avec git et permet d'organiser le
|
|
-déroulement du projet. Souvent, on utilise une branche principale "master" qui
|
|
|
|
|
|
+déroulement du projet. Souvent, on utilise une branche principale `master` qui
|
|
"doit toujours fonctionner" et, pour chaque fonctionnalité à ajouter, on dérive
|
|
"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
|
|
|
|
|
|
+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.
|
|
fonctionnalité réalisée (ou partiellement réalisée) et testée.
|
|
|
|
|
|

|
|

|
|
@@ -27,7 +27,7 @@ La commande `git branch` permet d'afficher les branches.
|
|
|
|
|
|

|
|

|
|
|
|
|
|
-On peut avoir plus d'information avec la commande `git log --graph --all --oneline --decorate`.
|
|
|
|
|
|
+On peut avoir plus d'information avec la commande `git log --graph --oneline --decorate`.
|
|
|
|
|
|

|
|

|
|
|
|
|
|
@@ -55,7 +55,7 @@ Les nouveaux commits sont alors effectués pour la branche sélectionnée.
|
|
|
|
|
|

|
|

|
|
|
|
|
|
-Le master est une branche comme les autres qu'on peut également sélectionnée.
|
|
|
|
|
|
+Le `master` est une branche comme les autres qu'on peut également sélectionnée.
|
|
|
|
|
|

|
|

|
|
|
|
|
|
@@ -105,7 +105,8 @@ La commande `git ls-remote` permet de lister les branches distantes.
|
|
## Terminer une branche locale
|
|
## Terminer une branche locale
|
|
|
|
|
|
Pour terminer une branche locale (c'est-à-dire supprimer l'étiquette
|
|
Pour terminer une branche locale (c'est-à-dire supprimer l'étiquette
|
|
-correspondante), il faut d'abord sélectionner une autre branche...
|
|
|
|
|
|
+correspondante dans le dépôt local), il faut d'abord sélectionner une autre
|
|
|
|
+branche...
|
|
|
|
|
|

|
|

|
|
|
|
|
|
@@ -120,7 +121,8 @@ correspondante), il faut d'abord sélectionner une autre branche...
|
|
## Terminer une branche distante
|
|
## Terminer une branche distante
|
|
|
|
|
|
Pour terminer une branche distante (c'est-à-dire supprimer l'étiquette
|
|
Pour terminer une branche distante (c'est-à-dire supprimer l'étiquette
|
|
-correspondante), il faut utiliser la commande `git push --delete ...`
|
|
|
|
|
|
+correspondante sur le serveur), il faut utiliser la commande `git push --delete
|
|
|
|
+...`
|
|
|
|
|
|

|
|

|
|
|
|
|
|
@@ -130,7 +132,7 @@ correspondante), il faut utiliser la commande `git push --delete ...`
|
|
|
|
|
|
Généralement, vouloir supprimer un commit déjà envoyé sur le serveur est une
|
|
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
|
|
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
|
|
|
|
|
|
+casser les commits d'un collaborateur qui aurait déjà récupéré et continué les
|
|
commits en question, donc il vaut mieux committer des corrections.
|
|
commits en question, donc il vaut mieux committer des corrections.
|
|
|
|
|
|
Mais si c'est vraiment ce que vous voulez faire, voici la procédure (pensez
|
|
Mais si c'est vraiment ce que vous voulez faire, voici la procédure (pensez
|
|
@@ -141,11 +143,11 @@ supprimés sur le serveur seront de nouveau envoyés au prochain push).
|
|
|
|
|
|
## Réécrire l'historique
|
|
## Réécrire l'historique
|
|
|
|
|
|
-Souvent, on crée des commits au fur et à mesure du travail pour fixer et
|
|
|
|
-partager les modifications. Mais pour certaines applications, on peut vouloir
|
|
|
|
-un graphe de commits "plus propre", où les commits doivent suivre une structure
|
|
|
|
|
|
+Souvent, on crée des commits au fur et à mesure, pour sauvegarder et partager
|
|
|
|
+les modifications. Mais pour certaines applications, on peut vouloir un graphe
|
|
|
|
+de commits "plus propre", où les commits doivent suivre une structure
|
|
prédéterminée, ou au contraire les réorganiser a posteriori. Git offre des
|
|
prédéterminée, ou au contraire les réorganiser a posteriori. Git offre des
|
|
-fonctionnalités pour cela : regrouper des commits, les déplacer... Ces
|
|
|
|
|
|
+fonctionnalités pour cela : regrouper des commits, les déplacer, etc... Ces
|
|
fonctionnalités ne sont pas traitées dans ce tutoriel (voir la documentation
|
|
fonctionnalités ne sont pas traitées dans ce tutoriel (voir la documentation
|
|
sur les `git rebase`).
|
|
sur les `git rebase`).
|
|
|
|
|
|
@@ -155,27 +157,38 @@ sur les `git rebase`).
|
|
Résumé des commandes git précédentes :
|
|
Résumé des commandes git précédentes :
|
|
|
|
|
|
---|---|
|
|
---|---|
|
|
-`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 ...` | |
|
|
|
|
|
|
+`git branch` | afficher la liste des branches |
|
|
|
|
+`git log --graph --oneline --decorate` | afficher le graph des commits |
|
|
|
|
+`git ls-remote` | afficher la liste des branches distantes |
|
|
|
|
+`git branch <nom>` | créer une nouvelle branche locale |
|
|
|
|
+`git checkout <branche>` | sélectionne une branche |
|
|
|
|
+`git merge <branche>` | fusionne une branche dans la branche courante |
|
|
|
|
+`git push --set-upstream <remote> <branche>` | envoie la branche courante dans une branche distante |
|
|
|
|
+`git branch -d <branche>` | supprime une branche locale (enlève l'étiquette) |
|
|
|
|
+`git push --delete <remote> <branche>` | supprime une branche distante |
|
|
|
|
|
|
Quelques conseils de méthode de travail :
|
|
Quelques conseils de méthode de travail :
|
|
|
|
|
|
-- avoir une branche master "qui marche tout le temps"
|
|
|
|
|
|
+- essayez d'avoir une branche `master` "qui marche tout le temps"
|
|
- pour chaque tâche du projet, créez une branche dédiée, que vous fusionnerez
|
|
- 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.
|
|
|
|
|
|
+ dans le `master` une fois les modifications commitées
|
|
- utiliser des branches ne vaccine pas contre les conflits, donc pensez à faire
|
|
- utiliser des branches ne vaccine pas contre les conflits, donc pensez à faire
|
|
- quand même le point avec vos collègues régulièrement.
|
|
|
|
|
|
+ quand même le point avec vos collègues régulièrement
|
|
|
|
|
|
## Exercice
|
|
## Exercice
|
|
|
|
|
|
-TODO
|
|
|
|
|
|
+- clonez un dépôt distant dans deux dépôts locaux
|
|
|
|
+- créez une nouvelle branche "b1", faites quelques commits dans b1 puis
|
|
|
|
+ fusionnez-les dans le master
|
|
|
|
+- envoyez la branche b1 sur le serveur et vérifiez que vous la récupérez bien
|
|
|
|
+ dans le second dépôt local
|
|
|
|
+- créez une branche "b2" à partir du commit précédant le master courant, faites
|
|
|
|
+ quelques commits dans b2 puis fusionnez-les dans le master
|
|
|
|
+- fusionnez le master dans b1 et vérifiez le graphe des commits avec le client
|
|
|
|
+ git console et avec un client graphique
|
|
|
|
+- envoyez la branche b2 sur le serveur puis supprimez-la sur le dépôt local et
|
|
|
|
+ sur le dépôt distant
|
|
|
|
+
|
|
|
|
|
|
* * * * *
|
|
* * * * *
|
|
|
|
|