Lorsque j'essaie d'extraire mon répertoire de projet dans le terminal, je vois l'erreur suivante:
harsukh@harsukh-desktop:~/Sites/branch1$ git pull origin master
U app/config/app.php
U app/config/database.php
U app/routes.php
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'.
Pourquoi git dit-il "Pull is not possible because you have unmerged files"
, et comment puis-je le résoudre?
git
git-pull
merge-conflict-resolution
git-fetch
Harsukh Makwana
la source
la source
Réponses:
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 ungit 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:
Tout d'abord, créons la structure du référentiel
Maintenant, nous sommes dans repo_clone, et si vous faites un
git pull
, cela créera des conflitsSi nous ignorons les conflits dans le clone et faisons plus de commits dans le dépôt d'origine maintenant,
Et puis nous faisons un
git pull
, nous obtenonsNotez que le
file
now est dans un état non fusionné et si nous faisons ungit status
, nous pouvons clairement voir la même chose:Donc, pour résoudre cela, nous devons d'abord résoudre le conflit de fusion que nous avons ignoré plus tôt
et définissez son contenu sur
puis ajoutez-le et validez les modifications
la source
Vous essayez d'ajouter un autre nouveau commit dans votre branche locale alors que votre répertoire de travail n'est pas propre. En conséquence, Git refuse de faire le pull. Considérez les diagrammes suivants pour mieux visualiser le scénario:
Il existe deux options pour faire face à cette situation. Vous pouvez soit annuler les modifications apportées à vos fichiers, soit les conserver.
Première option: supprimer les modifications
Vous pouvez soit utiliser
git checkout
pour chaque fichier non fusionné, soit vous pouvez utilisergit reset --hard HEAD
pour réinitialiser tous les fichiers de votre branche sur HEAD. À propos, HEAD dans votre succursale locale est B, sans astérisque. Si vous choisissez cette option, le diagramme devient:Maintenant, lorsque vous tirez, vous pouvez avancer rapidement votre branche avec les modifications de master. Après avoir tiré, votre branche ressemblerait à master:
Option 2: conserver les modifications
Si vous souhaitez conserver les modifications, vous souhaiterez d'abord résoudre les conflits de fusion dans chacun des fichiers. Vous pouvez ouvrir chaque fichier dans votre IDE et rechercher les symboles suivants:
Git vous présente deux versions de code. Le code contenu dans les marqueurs HEAD est la version de votre succursale locale actuelle. L'autre version est ce qui vient de la télécommande. Une fois que vous avez choisi une version du code (et supprimé l'autre code ainsi que les marqueurs), vous pouvez ajouter chaque fichier à votre zone de préparation en tapant
git add
. La dernière étape consiste à valider votre résultat en tapantgit commit -m
avec un message approprié. À ce stade, notre diagramme ressemble à ceci:Ici, j'ai étiqueté le commit que nous venons de faire comme C 'car il est différent du commit C sur la télécommande. Maintenant, si vous essayez de tirer, vous obtiendrez une erreur d'avance non rapide. Git ne peut pas lire les modifications dans remote sur votre branche, car votre branche et la télécommande ont divergé du commit ancêtre commun B.À ce stade, si vous voulez tirer, vous pouvez en faire un autre
git merge
, ougit rebase
votre branche sur la télécommande.Maîtriser Git nécessite d'être capable de comprendre et de manipuler des listes liées unidirectionnelles. J'espère que cette explication vous fera réfléchir dans la bonne direction sur l'utilisation de Git.
la source
Theres une solution simple à cela. Mais pour cela, vous devrez d'abord apprendre ce qui suit
Pour supprimer les conflits, vous pouvez utiliser
La commande ci-dessus ouvre essentiellement un fichier local, un fichier mixte, un fichier distant (3 fichiers au total), pour chaque fichier en conflit. Les fichiers locaux et distants sont juste pour votre référence, et en les utilisant, vous pouvez choisir ce qu'il faut inclure (ou non) dans le fichier mixte. Et il suffit de sauvegarder et de quitter le fichier.
la source
Si vous ne souhaitez pas fusionner les modifications et que vous souhaitez toujours mettre à jour votre local, exécutez:
Cela réinitialisera votre local avec HEAD, puis tirera votre télécommande en utilisant git pull.
Si vous avez déjà validé votre fusion localement (mais que vous n'avez pas encore poussé vers Remote) et que vous souhaitez également la rétablir:
la source
Si vous souhaitez extraire une branche distante pour l'exécuter localement (par exemple à des fins de révision ou de test), et lorsque
$ git pull
vous obtenez des conflits de fusion locaux:la source
Vous avez des fichiers localement qui doivent être fusionnés avant de pouvoir les extraire. Vous pouvez extraire les fichiers, puis tirer pour écraser vos fichiers locaux.
la source
Étapes à suivre :
Merci, Sarbasish
la source
Il y avait le même problème avec moi
Dans mon cas, les étapes sont les suivantes:
Voici le message qui est apparu -
et ont respectivement 2 et 1 commit différent. Vous avez des chemins non fusionnés.
(use "git pull" to merge the remote branch into yours)
(fix conflicts and run "git commit")
Chemins non fusionnés:
(utilisez "git add ..." pour marquer la résolution)
Quel tour peut poser problème résolu avec cette image -
la source
Lorsqu'un conflit de fusion se produit, vous pouvez ouvrir un fichier individuel. Vous obtiendrez des symboles "<<<<<<< ou >>>>>>>". Celles-ci font référence à vos modifications et aux modifications présentes sur la télécommande. Vous pouvez modifier manuellement la pièce requise. après cela, enregistrez le fichier puis faites: git add
Les conflits de fusion seront résolus.
la source
Exécutez simplement cette commande:
la source