S'assurer qu'on est sur la branche develop
git checkout develop
S'assurer que la branche est à jour
git pull
Maintenant pour faire les développements qu'on a en tête on crée une nouvelle branche qui porte un nom en rapport avec ce qu'on veut faire.
git checkout -b ajout-de-telle-fonctionalite
En fait git checkout
sert normalement à passer d'une branche à une autre, pas à en créer une. C'est l'option -b
qui fait qu'on crée une nouvelle branche au moment où on passe dessus. Cette nouvelle branche se crée en ayant pour base la branche sur la quelle où on se trouve juste avant (en l'occurrence develop
). Afin d'avoir la liste des branches locale on peut utiliser la commande suivante (on peut voir d'ailleurs dans le résultat qu'on est bien sur la nouvelle branche ajout-de-telle-fonctionalite
) :
git branch
Maintenant il faut qu'on envoie cette branche nouvellement créée en locale, vers notre dépôt git :
git push -u origin ajout-de-telle-fonctionalite
Maintenant on peut faire tous nos travaux et nos commits sur cette branche. Une fois qu'on a fini (ou de temps en temps), on peut récupérer ce qui a été fait sur develop
afin que notre branche ajout-de-telle-fonctionalite
garde les nouveautés ajoutées entre temps à develop
.
D'abord on met à jour notre branch develop
locale, puis on retourne sur notre branche :
git checkout develop
git pull
git checkout ajout-de-telle-fonctionalite
Maintenant deux options s'offrent à nous pour appliquer les nouveautés de develop
sur ajout-de-telle-fonctionalite
. Ces deux méthodes sont l'objet de discussions :
- https://www.atlassian.com/git/tutorials/merging-vs-rebasing
- https://stackoverflow.com/questions/804115/when-do-you-use-git-rebase-instead-of-git-merge
La première consiste à utiliser la commande de
rebase
qui revient en fait à intercaler tous les commits qui ont eu lieu dansdevelop
avant ceux qu'on a fait dansajout-de-telle-fonctionalite
. Il va appliquer nos commits par-dessus ceux dedevelop
. (Il y aura peut-être des conflits à corriger, la commande nous dit alors de faire desgit add
etgit rebase --continue
une fois les conflits résolus.)
git rebase develop
Il faut ensuiter pousser cette version modifiée de l'historique vers la branche ajout-de-telle-fonctionalite
distante (en mode forcé car on change l'historique et que cela peut être dangereux suivant la branche où on le fait, cf. liens de discussions).
git push -f
L'autre option est de merger le contenu de develop
dans ajout-de-telle-fonctionalite
. (À nouveau, il y aura peut-être des conflits à corriger, la commande nous dit alors de faire des git add
et git merge --continue
une fois les conflits résolus.)
git merge develop
Il faut ensuite pousser notre merge vers le serveur distant (pas besoin du mode forcé dans ce cas) :
git push
Cela va créer un commit consacré au merge. Contrairement à la méthode du rebase, qui ne va pas créer de commit supplémentaire.
Maintenant que notre branche est à jour avec develop
et qu'elle n'a pas de conflit, on peut aller sur l'interface de Gitlab/Github pour faire une demande de merge/pull request depuis ajout-de-telle-fonctionalite
vers develop
. Cela va nous indiquer toutes les modifications faites dans ajout-de-telle-fonctionalite
par rapport à develop
, quelqu'un d'autre peut ainsi vérifier le code avant de l'accepter dans la branche develop
qui sert de base de travail commune à tout le monde.
Une fois notre branche ajout-de-telle-fonctionalite
acceptée et mergée dans develop il ne nous reste plus qu'à la supprimer, pour ça on retourne sur develop
sur laquelle on récupère les modifications qui ont été ajoutée suite à notre merge/pull request, et on supprime la branche ajout-de-telle-fonctionalite
qui ne nous servira plus.
git checkout develop
git pull
git branch -d ajout-de-telle-fonctionalite
Et voilà ! :)