Skip to main content

👽 Gérer des univers parallèles

Maintenant on va voir un autre coté de Git qui est la possibilité de gérer plusieurs version du code simultanément avec des "branches".

Créer une nouvelle branche

Imaginons que nous voulons tester de nouvelles fonctionalités sans impacter la branche principale. Pour cela on va créer une nouvelle branche et aller dessus:

# "checkout" est utilisé pour voyager entre les différentes branches
# Le flag "-b" est utilisée pour créer une nouvelle branche 
git checkout -b ma-super-fonctionalite

Maintenant on peut aussi voir la liste des branches et voir sur quelle branche nous sommes actuellement

git branch

A partir de maintenant tout commit fait ne sera pas enregistré sur la branche principale. Si on veut retourner sur la branche principale on peut alors utiliser un simple checkout

git checkout master

# Et puis quand on veut y retourner
git checkout ma-super-fonctionalite

Voyager entre les branches

Vous êtes en train de faire votre projet, mais vous voullez aller voir ou rapidement modifier un truc sur la branche principale. Problème : vous n'avez pas encore fait de commit, donc vous ne pouvez pas changer de branche sinon vous allez perdre vos changements.

Git heureusement nous protège de ce sénario et affichera un message d'erreur si on souhaite changer de branche sans commit les changements.

Mais il y a une autre commande que l'on peut utiliser pour foutre tous les changements en cours dans un coin le temps de voyager entre les branches. C'est stash

# Cette commande va mettre temporairement vos changements dans un coin pour les retrouver plus tard
git stash

# Vous pouvez maintenant changer de branche sans problème
git checkout master

Maintenant vous avez fini vos explorations et voulez retourner à votre nouvelle branche et récupérer vos changements:

git checkout ma-super-fonctionalite

# "stash pop" pour retrouver les changements qui avaient été mis de coté avec stash
git stash pop

Si à l'inverse on souhaite ne pas les retrouver et les supprimer on peut utiliser "stash drop"

git stash drop

Fusioner des branches

Maintenant si on imagine que l'on a fait nos changements sur notre nouvelle branche et que l'on veut ajouter ces changements à la branche principale. On va utiliser merge

# Changement vers la branche principale
git checkout master
git merge ma-super-fonctionalite

Et en théorie ça foncitonne 🎉

Mais dans certains cas, quand les deux branches ont des modifications différentes pour un même fichier cela peut créer des conflits.

🚨 Merge conflict

Pour gérer les conflits il y a plusieurs méthodes.