... | ... | @@ -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
|
... | ... | @@ -956,4 +958,50 @@ sebastienjean@MacBook-Air-749 gitlab-bases % |
|
|
|
|
|
> :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` :
|
|
|
|
|
|
```bash
|
|
|
sebastienjean@MacBook-Air-749 gitlab-bases % git push
|
|
|
Enumerating objects: 7, done.
|
|
|
Counting objects: 100% (7/7), done.
|
|
|
Delta compression using up to 4 threads
|
|
|
Compressing objects: 100% (4/4), done.
|
|
|
Writing objects: 100% (5/5), 635 bytes | 635.00 KiB/s, done.
|
|
|
Total 5 (delta 1), reused 0 (delta 0), pack-reused 0
|
|
|
To https://gitlab.iut-valence.fr/jeans/gitlab-bases.git
|
|
|
b6c752a..1275819 main -> main
|
|
|
```
|
|
|
|
|
|
Ici, l'opération réussit car elle consiste à faire remonter une divergence résolue (commits `4` et `5`, avec `5` ayant comme prédécesseurs `3` et `4`)
|
|
|
|
|
|
On le vérifie en l'observant l'état du dépôt :
|
|
|
|
|
|
```bash
|
|
|
sebastienjean@MacBook-Air-749 gitlab-bases % git status
|
|
|
On branch main
|
|
|
Your branch is up to date with 'origin/main'.
|
|
|
|
|
|
nothing to commit, working tree clean
|
|
|
```
|
|
|
|
|
|
```bash
|
|
|
sebastienjean@MacBook-Air-749 gitlab-bases % git log --pretty="format:%h %s %an %D" --graph
|
|
|
* 1275819 Merge branch 'main' of https://gitlab.iut-valence.fr/jeans/gitlab-bases dev2 HEAD -> main, origin/main, origin/HEAD
|
|
|
|\
|
|
|
| * b6c752a Nouvelle modification du fichier unFichier.txt dev1
|
|
|
* | d9d3e8b Ajout du fichier unAutreFichier.txt dev2
|
|
|
|/
|
|
|
* 899b42b Ajout d'une ligne à unFichier.txt dev1
|
|
|
* 425ba5e ajout d'un fichier Sebastien Jean
|
|
|
* 23b7e54 Initial commit Sebastien Jean
|
|
|
```
|
|
|
|
|
|
La situation résultante est illustrée ci-dessous : |
|
|
\ No newline at end of file |