Git - Gestion des conflits

Effectuer des modifications dans la branche wchar_support

Jerry travaille sur le wchar_supportbranche. Il change le nom des fonctions et après les tests, il valide ses modifications.

[[email protected] src]$ git branch
 master
* wchar_support
[[email protected] src]$ git diff

La commande ci-dessus produit le résultat suivant -

diff --git a/src/string_operations.c b/src/string_operations.c
index 8fb4b00..01ff4e0 100644
--- a/src/string_operations.c
+++ b/src/string_operations.c
@@ -1,7 +1,7 @@
#include <stdio.h>
#include <wchar.h>
-size_t w_strlen(const wchar_t *s)
+size_t my_wstrlen(const wchar_t *s)
{
   const wchar_t *p = s;

Après avoir vérifié le code, il valide ses modifications.

[[email protected] src]$ git status -s
M string_operations.c

[[email protected] src]$ git add string_operations.c

[[email protected] src]$ git commit -m 'Changed function name'
[wchar_support 3789fe8] Changed function name
1 files changed, 1 insertions(+), 1 deletions(-)

[[email protected] src]$ git push origin wchar_support

La commande ci-dessus produira le résultat suivant -

Counting objects: 7, done.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 409 bytes, done.
Total 4 (delta 1), reused 0 (delta 0)
To [email protected]:project.git
64192f9..3789fe8 wchar_support -> wchar_support

Effectuer des changements dans la branche principale

Pendant ce temps, dans la branche master, Tom change également le nom de la même fonction et pousse ses modifications dans la branche master.

[[email protected] src]$ git branch
* master
[[email protected] src]$ git diff

La commande ci-dessus produit le résultat suivant -

diff --git a/src/string_operations.c b/src/string_operations.c
index 8fb4b00..52bec84 100644
--- a/src/string_operations.c
+++ b/src/string_operations.c
@@ -1,7 +1,8 @@
#include <stdio.h>
#include <wchar.h>
-size_t w_strlen(const wchar_t *s)
+/* wide character strlen fucntion */
+size_t my_wc_strlen(const wchar_t *s)
{
   const wchar_t *p = s;

Après avoir vérifié diff, il valide ses modifications.

[[email protected] src]$ git status -s
M string_operations.c

[[email protected] src]$ git add string_operations.c

[[email protected] src]$ git commit -m 'Changed function name from w_strlen to my_wc_strlen'
[master ad4b530] Changed function name from w_strlen to my_wc_strlen
1 files changed, 2 insertions(+), 1 deletions(-)

[[email protected] src]$ git push origin master

La commande ci-dessus produira le résultat suivant -

Counting objects: 7, done.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 470 bytes, done.
Total 4 (delta 1), reused 0 (delta 0)
To [email protected]:project.git
64192f9..ad4b530 master -> master

Sur le wchar_supportbranche, Jerry implémente la fonction strchr pour une chaîne de caractères large. Après le test, il s'engage et pousse ses modifications vers lewchar_support branche.

[[email protected] src]$ git branch
master
* wchar_support
[[email protected] src]$ git diff

La commande ci-dessus produit le résultat suivant -

diff --git a/src/string_operations.c b/src/string_operations.c
index 01ff4e0..163a779 100644
--- a/src/string_operations.c
+++ b/src/string_operations.c
@@ -1,6 +1,16 @@
#include <stdio.h>
#include <wchar.h>
+wchar_t *my_wstrchr(wchar_t *ws, wchar_t wc)
+
{
   +
   while (*ws) 
   {
      +
      if (*ws == wc)
      +
      return ws;
      +
      ++ws;
      + 
   }
   + return NULL;
   +
}
+
size_t my_wstrlen(const wchar_t *s)
{
   const wchar_t *p = s;

Après vérification, il valide ses modifications.

[[email protected] src]$ git status -s
M string_operations.c

[[email protected] src]$ git add string_operations.c

[[email protected] src]$ git commit -m 'Addded strchr function for wide character string'
[wchar_support 9d201a9] Addded strchr function for wide character string
1 files changed, 10 insertions(+), 0 deletions(-)

[[email protected] src]$ git push origin wchar_support

La commande ci-dessus produira le résultat suivant -

Counting objects: 7, done.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 516 bytes, done.
Total 4 (delta 1), reused 0 (delta 0)
To [email protected]:project.git
3789fe8..9d201a9 wchar_support -> wchar_support

S'attaquer aux conflits

Tom veut voir ce que Jerry fait sur sa branche privée alors, il essaie de tirer les dernières modifications du wchar_support branch, mais Git abandonne l'opération avec le message d'erreur suivant.

[[email protected] src]$ git pull origin wchar_support

La commande ci-dessus produit le résultat suivant -

remote: Counting objects: 11, done.
63Git Tutorials
remote: Compressing objects: 100% (8/8), done.
remote: Total 8 (delta 2), reused 0 (delta 0)
Unpacking objects: 100% (8/8), done.
From git.server.com:project
* branch
wchar_support -> FETCH_HEAD
Auto-merging src/string_operations.c
CONFLICT (content): Merge conflict in src/string_operations.c
Automatic merge failed; fix conflicts and then commit the result.

Résoudre des conflits

D'après le message d'erreur, il est clair qu'il y a un conflit dans src / string_operations.c. Il exécute la commande git diff pour afficher plus de détails.

[[email protected] src]$ git diff

La commande ci-dessus produit le résultat suivant -

diff --cc src/string_operations.c
index 52bec84,163a779..0000000
--- a/src/string_operations.c
+++ b/src/string_operations.c
@@@ -1,8 -1,17 +1,22 @@@
#include <stdio.h>
#include <wchar.h>
++<<<<<<< HEAD
+/* wide character strlen fucntion */
+size_t my_wc_strlen(const wchar_t *s)
++=======
+ wchar_t *my_wstrchr(wchar_t *ws, wchar_t wc)
+
{
   +
   +
   while (*ws) 
   {
      if (*ws == wc)
      +
      return ws;
      +
      ++ws;
      + 
   }
   + return NULL;
   +
}
+
+ size_t my_wstrlen(const wchar_t *s)
++>>>>>>>9d201a9c61bc4713f4095175f8954b642dae8f86
{
   const wchar_t *p = s;

Comme Tom et Jerry ont changé le nom de la même fonction, Git est dans un état de confusion et il demande à l'utilisateur de résoudre le conflit manuellement.

Tom décide de conserver le nom de fonction suggéré par Jerry, mais il garde le commentaire ajouté par lui, tel quel. Après avoir supprimé les marqueurs de conflit, git diff ressemblera à ceci.

[[email protected] src]$ git diff

La commande ci-dessus produit le résultat suivant.

diff --cc src/string_operations.c
diff --cc src/string_operations.c
index 52bec84,163a779..0000000
--- a/src/string_operations.c
+++ b/src/string_operations.c
@@@ -1,8 -1,17 +1,18 @@@
#include <stdio.h>
#include <wchar.h>
+ wchar_t *my_wstrchr(wchar_t *ws, wchar_t wc)
+
{
   +
   while (*ws) 
   {
      +
      if (*ws == wc)
      +
      return ws;
      +
      ++ws;
      + 
   }
   + return NULL;
   +
}
+
+/* wide character strlen fucntion */
- size_t my_wc_strlen(const wchar_t *s)
+ size_t my_wstrlen(const wchar_t *s)
{
   const wchar_t *p = s;

Comme Tom a modifié les fichiers, il doit d'abord valider ces modifications et ensuite, il peut extraire les modifications.

[[email protected] src]$ git commit -a -m 'Resolved conflict'
[master 6b1ac36] Resolved conflict

[[email protected] src]$ git pull origin wchar_support.

Tom a résolu le conflit, maintenant l'opération d'extraction réussira.