Ce qui se passe actuellement, c'est que vous avez un certain ensemble de fichiers, que vous avez essayé de fusionner plus tôt, mais ils ont généré des conflits de fusion. Idéalement, si l'on obtient un conflit de fusion, il doit les résoudre manuellement et valider les modifications en utilisant git add file.name && git commit -m "removed merge conflicts"
. Désormais, un autre utilisateur a mis à jour les fichiers en question sur son référentiel et a poussé ses modifications vers le référentiel amont commun.
Il se trouve que vos conflits de fusion provenant (probablement) du dernier commit n'ont pas été résolus, donc vos fichiers ne sont pas fusionnés correctement, et donc le drapeau U
( unmerged
) pour les fichiers. Alors maintenant, lorsque vous faites un git pull
, git renvoie l'erreur, car vous avez une version du fichier, qui n'est pas correctement résolue.
Pour résoudre ce problème, vous devrez résoudre les conflits de fusion en question, puis ajouter et valider les modifications avant de pouvoir effectuer une opération git pull
.
Exemple de reproduction et résolution du problème:
# Note: commands below in format `CUURENT_WORKING_DIRECTORY $ command params`
Desktop $ cd test
Tout d'abord, créons la structure du référentiel
test $ mkdir repo && cd repo && git init && touch file && git add file && git commit -m "msg"
repo $ cd .. && git clone repo repo_clone && cd repo_clone
repo_clone $ echo "text2" >> file && git add file && git commit -m "msg" && cd ../repo
repo $ echo "text1" >> file && git add file && git commit -m "msg" && cd ../repo_clone
Maintenant, nous sommes dans repo_clone, et si vous faites un git pull
, cela créera des conflits
repo_clone $ git pull origin master
remote: Counting objects: 5, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From /home/anshulgoyal/Desktop/test/test/repo
* branch master -> FETCH_HEAD
24d5b2e..1a1aa70 master -> origin/master
Auto-merging file
CONFLICT (content): Merge conflict in file
Automatic merge failed; fix conflicts and then commit the result.
Si nous ignorons les conflits dans le clone et faisons plus de commits dans le dépôt d'origine maintenant,
repo_clone $ cd ../repo
repo $ echo "text1" >> file && git add file && git commit -m "msg" && cd ../repo_clone
Et puis nous faisons un git pull
, nous obtenons
repo_clone $ git pull
U file
Pull is not possible because you have unmerged files.
Please, fix them up in the work tree, and then use 'git add/rm <file>'
as appropriate to mark resolution, or use 'git commit -a'.
Notez que le file
now est dans un état non fusionné et si nous faisons un git status
, nous pouvons clairement voir la même chose:
repo_clone $ git status
On branch master
Your branch and 'origin/master' have diverged,
and have 1 and 1 different commit each, respectively.
(use "git pull" to merge the remote branch into yours)
You have unmerged paths.
(fix conflicts and run "git commit")
Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified: file
Donc, pour résoudre cela, nous devons d'abord résoudre le conflit de fusion que nous avons ignoré plus tôt
repo_clone $ vi file
et définissez son contenu sur
text2
text1
text1
puis ajoutez-le et validez les modifications
repo_clone $ git add file && git commit -m "resolved merge conflicts"
[master 39c3ba1] resolved merge conflicts