21/04/2021

2. Synchronisation

Lu 109 fois Licence Creative Commons

Envoyer des commits

Pour envoyer les commits locaux de la branche courante vers le remote, on utilise la commande push:

git push
[output]Enumerating objects: 5, done.
[output]Counting objects: 100% (5/5), done.
[output]Delta compression using up to 4 threads
[output]Compressing objects: 100% (3/3), done.
[output]Writing objects: 100% (3/3), 308 bytes | 308.00 KiB/s, done.
[output]Total 3 (delta 2), reused 0 (delta 0), pack-reused 0
[output]remote: Resolving deltas: 100% (2/2), completed with 2 local objects.
[output]To https://github.com/AymDev/cours-git.git
[output]   acad3a4..023563b  master -> master

Upstream

Si la branche locale n'a aucune branche distante (en général lorsque l'on souhaite envoyer les commits d'une nouvelle branche), Git affiche une erreur:

git push
[output]fatal: The current branch master has no upstream branch.
[output]To push the current branch and set the remote as upstream, use
[output]
[output]    git push --set-upstream origin master

Il faut exécuter la commande affichée pour lier la branche locale avec la branche distante qui sera créée: la commande push avec une option --set-upstream suivie du nom du remote et de la branche distante:

git push --set-upstream origin master
[output]Enumerating objects: 30, done.
[output]...
[output]To https://github.com/AymDev/cours-git.git
[output] * [new branch]      master -> master
[output]Branch 'master' set up to track remote branch 'master' from 'origin'.

Récupérer des commits

Pour que le dépôt local récupère les changements depuis le dépôt distant on utilisera fetch:

git fetch

Cependant cela ne mettra pas à jour les branches locales. Il faudrait pour ça fusionner la branche locale ma-branche avec la branche distante origin/ma-branche.

Donc pour récupérer de nouveaux commits (qui auraient été push par d'autres développeurs), on utilisera la commande pull:

git pull
[output]Already up to date.

La commande pull va par défaut exécuter git fetch puis git merge.

Mode de récupération

En effectuant une fusion, il se peut que la commande git pull provoque des erreurs avec votre travail en local (que vous n'avez pas encore envoyé).
On peut changer le comportement de la commande pour effectuer un rebase au lieu d'un merge, ainsi votre travail sera appliqué par-dessus les commits récupérés:

git config --global pull.rebase true

Note: alternativement, si vous ne souhaitez effectuer un git pull avec rebase que ponctuellement, vous pouvez exécuter git pull --rebase.