Erreur Git lors de la validation après la fusion – irrécupérable: impossible d’effectuer une validation partielle lors d’une fusion

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

Lorsque je git commit file.php -m "message" le fichier résolu avec git commit file.php -m "message" j’obtiens l’erreur suivante:

 fatal: cannot do a partial commit during a merge. 

J’ai eu le même problème avant et l’utilisation de -a in commit a parfaitement fonctionné. Je pense que ce n’est pas le moyen idéal car je ne veux pas commettre tous les changements. Je souhaite valider les 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 trouvé de réponse satisfaisante à ce problème.

J’ai trouvé que l’ajout de “-i” à la commande commit résout ce problème pour moi. Le -i lui dit essentiellement de mettre en place des fichiers supplémentaires avant de valider. C’est:

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

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

Vous pouvez utiliser git commit -i pour 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. Ne mettre en scène que le fichier en conflit ( git add your_file.txt )
  2. git commit -m "your_merge_message"

Vous avez probablement un conflit dans quelque chose que vous n’avez pas mis en scène pour commettre. git ne vous laissera pas commettre les choses indépendamment (parce que tout cela fait partie de la fusion, je suppose), donc vous devez git add ce fichier et ensuite git commit -m "Merge conflict resolution" . Le drapeau -i pour git commit fait la différence pour vous.

J’ai eu ceci quand j’ai oublié le -m dans mon git commit en résolvant un conflit de fusion de git.

 git commit "commit message" 

devrait être

 git commit -m "commit message" 

Votre fusion s’est arrêtée au milieu de l’action. Vous devez append vos fichiers, puis “git commit”:

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

À votre santé

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

Cela devrait fonctionner.

 git commit -m "Fixing merge" 

Si vous voulez simplement abandonner l’ensemble du choix des cerises et valider les fichiers dans les ensembles de votre choix,

 git reset --soft  

vous y amène.

Ce que fait la réinitialisation logicielle, c’est que le pointeur pointe sur le HEAD actuel vers le commit (ish) que vous avez donné, mais ne modifie pas les fichiers. La réinitialisation matérielle déplacera le pointeur et rétablira également tous les fichiers dans l’état dans ce commit (ish). Cela signifie qu’avec la réinitialisation logicielle, vous pouvez effacer le statut de fusion mais conserver les modifications apscopes aux fichiers réels, puis les valider ou les réinitialiser individuellement selon votre goût.

Pendant une fusion, Git veut garder une trace des twigs parentes pour toutes sortes de raisons. Ce que vous voulez faire, ce n’est pas une fusion car Git le voit. Vous voudrez probablement faire une rebase ou une sélection manuelle.

Pour moi, cela s’est produit dans SourceTree lorsque j’ai essayé de commettre une fusion avant de résoudre tous les fichiers. J’ai ensuite marqué le dernier fichier résolu et pourtant il m’a toujours donné cette erreur lors de la tentative de validation. J’ai fermé SourceTree et l’ai rouvert, puis il a commis une amende.

git commit -i -m 'merge message' n’a pas fonctionné pour moi. Ça disait:

fatal: No paths with --include/--only does not make sense.

FWIW, je suis arrivé via cette question parce que je recevais ce message:

fatal: You have not concluded your merge (MERGE_HEAD exists).

J’ai également essayé mergetool, qui disait qu’aucun fichier ne devait No files need merging . Très perturbant! Donc, le MERGE_HEAD n’est pas dans un fichier qui doit être fusionné- ??

Enfin, j’ai utilisé cette astuce pour append uniquement les fichiers modifiés (je ne voulais pas append tous les fichiers de mon arbre, car j’en ai certains que je ne veux pas suivre):

git ls-files -m | xargs git add

Ensuite, j’ai finalement été (!) Capable de commettre et de pousser. Ce serait bien si git vous donnait de meilleures indications sur ce qu’il fallait faire dans ces situations.

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

Contexte: une autre équipe A apporté des modifications au référentiel Git distant (via Beanstalk). De mon côté, les fichiers .xcodeproj sont entrés sous différents répertoires, et les modifications n’ont pas eu lieu. Plus tard, lorsque j’ai essayé de commettre, j’ai reçu une erreur de conflit d’arbre dans Xcode.

Capture d'écran du conflit d'arbres

Étant presque impossible à corriger avec Xcode, j’ai remplacé le fichier .xcodeproj par une version téléchargée du serveur Git. Le résultat … le projet Xcode a semblé disparaître, mais toutes les mises à jour du Pull endommagé apparaissaient à mesure que des modifications étaient apscopes et mises en scène pour un Commit.

Regardez tous ces fichiers Mods et Added

Cependant, en essayant de commettre, j’ai reçu le même message d’erreur “fatal: impossible de faire 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 novice, alors je pourrais 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 Branchement dans une twig secondaire et passage à cette twig. Ensuite, j’ai créé une copie de travail et placé le répertoire sur cette copie de travail en dehors du répertoire du projet d’origine. (Je ne sais pas si cela était nécessaire, mais c’est ce que j’ai fait en lisant d’autres techniques de dépannage.) Puis j’ai changé de twig pour le master, où j’ai réalisé que tous mes fichiers Staged Pour être sûr que tous les fichiers ont été mis à jour avec les dernières modifications apscopes par l’autre partie, j’ai créé une nouvelle twig appelée ThirdBranch, qui dupliquait tous les fichiers, la transmettait au serveur Git et permettait à Beanstalk La twig ThirdBrach Je viens de pousser (ligne par ligne), et toutes les modifications apscopes par l’autre partie étaient présentes sur mon Xcode. Cela signifiait que mon référentiel maître et le référentiel maître Git étaient les mêmes, ce qui vérifie que j’ai résolu le problème uniquement avec Xcode.

Ne me demande pas comment, au-delà de ce que je viens de décrire … et comble certainement les lacunes que j’ai laissées de côté. Je suis nouveau à cela et je ne comprends pas tout. Peut-être qu’un programmeur expérimenté peut-il séparer les informations non pertinentes de l’information pertinente et recréer cette technique plus clairement, ce qui explique en partie pourquoi je poste ceci.

Ceci est une réponse en double à la question dupliquée comme à: Échec Xcode Git Merge est bloqué

S’il se trouve dans l’ arborescence source , nous devrions explicitement marquer un fichier comme résolu une fois les conflits résolus. Sélectionnez le fichier qui a été résolu à aucun conflit. Puis Actions -> Résoudre les conflits -> Mark résolu . Si vous avez plusieurs fichiers, faites la même chose pour tous. S’engager maintenant