@@ -913,24 +913,26 @@ Merge made by the 'recursive' strategy.
1 file changed, 1 insertion(+), 2 deletions(-)
```
⏪ L'exécution de la commande `git pull` s'effectue en 2 sous-commandes qui peuvent s'exécuter indépendamment :
:rewind: L'exécution de la commande `git pull` s'effectue en 2 sous-commandes qui peuvent s'exécuter indépendamment :
1.`git fetch`
* le client git local envoie au serveur des informations sur l'état de sa branche `origin/main`
* le serveur renvoie au client ce qui lui manque pour mettre à jour cette branche
1.`git fetch`
* le client git local envoie au serveur des informations sur l'état de sa branche `origin/main`
* le serveur renvoie au client ce qui lui manque pour mettre à jour cette branche
2.`git merge`
* le client git local essaie d'intégrer le contenu d'`origin/main` dans `main` et pour cela il determine la partie commune de l'historique
***cas 1** : si la différence est une série de commits qui s'enchainent directement derrière le dernier commit de `main`, la fusion est automatique et consiste à raccrocher les commits manquants dans `main`
* _👀c'est le cas du retard simple vu précédemment_
* _:eyes:c'est le cas du retard simple vu précédemment_
***cas 2** : si la différence est une série de commits qui s'enchainent à partir d'un point de l'historique situé **avant** le dernier commit de `main`, **mais** que les commits sur les 2 branches **ne rentrent pas en conflit**, la fusion est automatique, elle consiste à faire temporairement coexister 2 branches parallèles (A et B) qui se rejoignent sur un commit généré automatiquement (appelé commit de fusion) qui a comme prédécesseurs les derniers commits de A et B (qui résout la divergence)
* _👀c'est le cas de l'avance/retard sans conflit_
* _:eyes:c'est le cas de l'avance/retard sans conflit_
***cas 3** : si la différence est qu'une série de commits qui s'enchainent à partir d'un point de l'historique situé **avant** le dernier commit de `main`, **mais** que les commits sur les 2 branches **rentrent en conflit**, la fusion n'est plus automatique et elle requiert une intervention du développeur (résolution de conflit)
*👀**_ce dernier cas n'est pas traité par ce guide_**
*:eyes:**_ce dernier cas n'est pas traité par ce guide_**
On vérifie l'état du dépôt et on en déduit que :
* il s'est opéré une fusion automatique
* le dépôt local n'est pas synchronisé avec le dépôt distant
* le dépôt local n'est pas synchronisé avec le dépôt distant
```bash
sebastienjean@MacBook-Air-749 gitlab-bases % git status
> :eyes: l'option `--graph` de la commande `git log` permet de représenter l'**historique sous forme de graphe**, ce qui permet de voir les divergences et leur résolution.
La situation résultante est illustrée ci-dessous :
> 👀 Le commit `5` est le commit de fusion. La branche `origin/main` est uniquement un cache de l'état de la branche sur le dépôt distant, elle n'inclut pas encore les commits `4` et `5`
#### Synchronisation montante à partir du dépôt `clone 2`
On effectue la synchronisation montante à partir du dépôt `clone 2` via la commande `git push` :