web-dev-qa-db-fra.com

Erreur Git lors de la validation après la fusion - fatal: impossible d'effectuer une validation partielle lors d'une fusion

J'ai couru un git pull qui s'est terminé par un conflit. J'ai résolu le conflit et tout va bien maintenant (j'ai utilisé mergetool également).

Lorsque je valide le fichier résolu avec git commit file.php -m "message", le message d'erreur suivant s'affiche:

fatal: cannot do a partial commit during a merge.

J'avais le même problème avant et utiliser -a dans commit fonctionnait parfaitement. Je pense que ce n'est pas la solution idéale car je ne veux pas valider tous les changements. Je veux valider des fichiers séparément avec des commentaires séparés. Comment puis je faire ça? Pourquoi git ne permet-il pas aux utilisateurs de valider des fichiers séparément après une fusion? Je n'ai pas pu trouver de réponse satisfaisante à ce problème.

241
pMan

J'ai trouvé que l'ajout de "-i" à la commande commit résout ce problème pour moi. Le -i lui dit de mettre en scène des fichiers supplémentaires avant de valider ..__, c'est-à-dire:

git commit -i myfile.php
394
MikaelHalen
git commit -am 'Conflicts resolved'

Cela a fonctionné pour moi. Vous pouvez essayer cela aussi.

85
Pratip Ghosh

Vous pouvez utiliser git commit -i dans la plupart des cas, mais au cas où cela ne fonctionnerait pas 

Vous devez faire git commit -m "your_merge_message". Pendant un conflit de fusion, vous ne pouvez pas fusionner un seul fichier, vous devez donc 

  1. Mettre en scène uniquement le fichier en conflit (git add your_file.txt)
  2. git commit -m "your_merge_message"
27
aWebDeveloper

Vous avez probablement un conflit dans quelque chose que vous n'avez pas organisé pour le commit. git ne vous laissera pas commettre des choses de façon indépendante (car tout cela fait partie de la fusion, je suppose), vous devez donc git add ce fichier puis git commit -m "Merge conflict resolution" L'indicateur -i pour git commit effectue l'ajout pour vous.

13
Paul Price

Je l'ai compris lorsque j'ai oublié le -m dans mon commit git lors de la résolution d'un conflit de fusion git.

git commit "commit message"

devrait être 

git commit -m "commit message"
9
wgeorge

Comme le message d'erreur l'indique, vous ne pouvez pas effectuer de validation partielle après une fusion. Au lieu de valider uniquement file.php, vous devez valider toutes les modifications. 

Cela devrait marcher.

git commit -m "Fixing merge" 
7
Asim Jalis

Votre fusion s'est arrêtée au milieu de l'action . Vous devez ajouter vos fichiers, puis "git commit":

git add file_1.php file_2.php file_3.php git commit

À votre santé

6
Moyshe Zuchmir

Si vous voulez simplement laisser tomber tout le processus de sélection et de validation des fichiers dans les ensembles de votre choix, 

git reset --soft <ID-OF-THE-LAST-COMMIT>

vous emmène là-bas.

La réinitialisation logicielle déplace le pointeur pointant vers le HEAD actuel vers le commit (ish) que vous avez donné mais ne modifie pas les fichiers. Une réinitialisation matérielle déplacerait le pointeur et ramènerait également tous les fichiers à l'état dans ce commit (ish). Cela signifie qu'avec la réinitialisation logicielle, vous pouvez effacer le statut de fusion tout en conservant les modifications dans les fichiers réels, puis les valider ou les réinitialiser individuellement à votre guise.

5
Zds

Pour ma part, cela s'est produit dans SourceTree lorsque j'ai essayé de valider une fusion avant de résoudre tous les fichiers. J'ai ensuite marqué le dernier fichier comme résolu et pourtant il m'a quand même donné cette erreur en essayant de valider. J'ai fermé SourceTree et l'ai rouvert, puis tout s'est bien passé.

3
Justin

Lors d'une fusion, Git veut garder une trace des branches parentes pour toutes sortes de raisons. Ce que vous voulez faire n’est pas une fusion telle que la conçoit Git. Vous voudrez probablement faire un rebase ou une sélection manuelle.

2
Talljoe

J'ai résolu ce problème avec une approche complète différente, en utilisant uniquement le contrôle de code source de Xcode.

Contexte: Une autre équipe a imposé des modifications au référentiel Git distant (via Beanstalk). De mon côté, les fichiers .xcodeproj sont entrés dans un répertoire différent, et les modifications n'ont pas été prises. Plus tard, lorsque j'ai essayé de valider, j'ai reçu une erreur de conflit d'arborescence dans Xcode.

 Tree Conflict Screenshot

Étant donné qu'il est presque impossible de corriger à l'aide de Xcode, j'ai remplacé le fichier .xcodeproj par une version téléchargée à partir du serveur Git. Le résultat ... le projet Xcode a semblé s’éclaircir, mais toutes les mises à jour du Pull corrompu s’affichaient comme des modifications que j’avais apportées et étaient mises en scène pour une validation. 

 Look at all these Mods and Added files

Cependant, lors de la tentative de validation, j'ai reçu la même erreur "fatale: impossible d'effectuer une validation partielle lors d'une fusion", dont il est question ici.

Voici comment j'ai résolu le problème ... (Maintenant, comprenez que je suis un programmeur débutant, je pourrais donc manquer de compréhension ... mais mon ignorance m'a amené à trouver un autre moyen de le faire.) D'abord, j'ai cloné mon maître Branche dans une branche secondaire et est passée à cette branche. Ensuite, j'ai créé une copie de travail et placé le répertoire dans cette copie de travail en dehors du répertoire de projet d'origine. (Je ne sais pas si cela était nécessaire, mais c'est ce que j'ai fait lorsque j'ai lu d'autres techniques de dépannage.) Puis j'ai changé de branche pour le maître, où j'ai réalisé que tous mes fichiers Staged (modifications apportées à Commit) avaient disparu. Pour m'assurer que tous les fichiers ont été mis à jour avec les dernières modifications apportées par l'autre partie, j'ai créé une nouvelle branche appelée ThirdBranch, qui a dupliqué tous les fichiers, l'a transmise au serveur Git et a laissé Beanstalk comparer la version de mon serveur de la branche principale La branche ThirdBrach que je viens juste de pousser (ligne par ligne), et tous les changements de l’autre partie étaient présents sur mon Xcode. Cela signifiait que mon référentiel maître et le référentiel maître Git étaient identiques, ce qui vérifie que j'ai résolu le problème en utilisant uniquement Xcode.

Ne me demandez pas comment, au-delà de ce que je viens de décrire ... et comblez certainement les lacunes que j'ai laissées de côté. Je suis nouveau à cela et je ne comprends pas tout. Peut-être un programmeur expérimenté peut-il séparer les informations non pertinentes des informations pertinentes et recréer cette technique plus clairement, ce qui explique en partie la raison pour laquelle je poste ceci.

Ceci est une réponse en double à la question en double à: Echec de la fusion de Xcode Git bloqué

2
Plexander
  1. allez dans le répertoire de votre projet
    1. afficher les fichiers cachés (le dossier .git apparaîtra)
    2. ouvrir le dossier .git
    3. supprimer MERGE_HEAD 
    4. commettre à nouveau
    5. si git vous a dit que git est verrouillé, retournez dans le dossier .git et supprimez index.lock
    6. engagez à nouveau tout fonctionnera correctement cette fois-ci.
1
Ahmed Samir

Après avoir lu tous les commentaires. c'était ma résolution:
Je devais "ajouter" à nouveau que de commettre: 

$ git commit -i -m support.html "doit once for all" [master 18ea92e] support.html
0
FelipeNutz

Si vous utilisez une arborescence source ou une autre interface graphique, assurez-vous que tous les fichiers sont vérifiés (après la fusion).

0
luky

S'il se trouve dans Arbre source , nous devons explicitement marquer un fichier comme résolu après la résolution des conflits. Sélectionnez le fichier qui vient d'être résolu sans aucun conflit. Puis Actions -> Résoudre les conflits -> Marquer comme résolu . Si vous avez plusieurs fichiers, faites la même chose pour tous. Engage maintenant.

0
cgr