Git erreur sur valider après la fusion fatale: impossible de faire un partiel commettre lors d'une fusion

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

quand je commets le fichier résolu avec git commit file.php -m "message" j'obtiens l'erreur:

fatal: cannot do a partial commit during a merge.

j'ai eu la même question avant et l'utilisation de -a dans commit a fonctionné parfaitement. Je pense que ce n'est pas la façon parfaite parce que je ne veux pas commettre tous les changements. Je veux engager des fichiers séparément avec des commentaires séparés. Comment puis-je le faire? Pourquoi git ne permet pas aux utilisateurs de propager des fichiers séparément après une fusion? Je ne pouvais pas trouver une réponse satisfaisante à ce problème.

223
demandé sur GreenMatt 2011-04-29 08:36:59

13 réponses

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 scène des fichiers supplémentaires avant de commettre. C'est-à-dire:

git commit -i myfile.php
372
répondu MikaelHalen 2011-11-09 09:39:50
git commit -am 'Conflicts resolved'

ça a marché pour moi. Tu peux essayer ça aussi.

80
répondu Pratip Ghosh 2014-01-09 05:51:21

vous pouvez utiliser git commit -i dans la plupart des cas mais au cas où cela ne fonctionne 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. Stade que le fichier en conflit ( git add your_file.txt )
  2. git commit -m "your_merge_message"
26
répondu aWebDeveloper 2017-06-01 14:40:14

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 puis git commit -m "Merge conflict resolution" . Le drapeau -i pour git commit fait l'ajout pour vous.

13
répondu Paul Price 2012-01-19 22:52:36

j'ai eu ça quand j'ai oublié le -m dans mon git commit lors de la résolution d'un conflit de fusion git.

git commit "commit message"

devrait être

git commit -m "commit message"
8
répondu wgeorge 2016-11-15 16:38:43

fusion arrêté 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

Cheers

6
répondu Moyshe Zuchmir 2015-01-13 10:10:59

comme le message d'erreur indique que vous ne pouvez pas effectuer une propagation partielle après une fusion. Au lieu de ne commettre que file.php , vous devriez commettre tous les changements.

ça devrait marcher.

git commit -m "Fixing merge" 
6
répondu Asim Jalis 2016-04-18 00:37:38

si vous voulez simplement laisser tomber tous les fichiers de sélection et de propagation dans n'importe quel jeu,

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

vous y amène.

ce que fait soft reset est qu'il déplace le pointeur pointant vers la tête courante vers la propagation(ish) que vous avez donné mais ne modifie pas les fichiers. La réinitialisation dure déplacerait le pointeur et ramènerait tous les fichiers à l'état dans cette propagation(ish). Cela signifie soft reset vous pouvez effacer l'état de fusion, mais garder les changements les fichiers réels et ensuite les propager ou les réinitialiser chacun individuellement selon votre goût.

5
répondu Zds 2016-10-19 13:05:28

lors d'une fusion Git veut garder la trace des branches parentes pour toutes sortes de raisons. Ce que vous voulez faire n'est pas une fusion que git le voit. Vous voudrez probablement faire un rebase ou un cherry-pick manuellement.

2
répondu Talljoe 2011-04-29 04:41:30

pour moi c'est arrivé dans SourceTree quand j'ai essayé de commettre une fusion avant de résoudre tous les fichiers. J'ai alors marqué le dernier fichier résolu et pourtant il m'a encore donné cette erreur en essayant de commettre. J'ai fermé SourceTree et l'ai rouvert, et puis il s'est bien engagé.

2
répondu Justin 2014-05-05 14:36:25

git commit -i -m 'merge message' ne marchait pas pour moi. Il disait:

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

FWIW, je suis ici par cette question relative à la parce que je recevais ce message:

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

j'ai aussi essayé mergetool, qui disait No files need merging . Très déroutant! Donc MERGE_HEAD n'est pas dans un fichier qui doit être fusionné-??

enfin, j'ai utilisé ce truc pour ajouter seulement le fichiers modifiés (Je ne voulais pas ajouter tous les fichiers dans mon arborescence, car j'en ai certains que je veux garder Non tracés):

git ls-files -m | xargs git add

alors j'étais enfin (!) en mesure de s'engager et de pousser vers le haut. Ce serait certainement bien si git vous donnait de meilleurs conseils sur ce qu'il faut faire dans ces situations.

2
répondu szeitlin 2017-05-23 12:03:05

j'ai résolu ce problème avec une complètement approche différente, en utilisant seulement le contrôle Source de Xcode.

Background: une autre équipe a poussé les changements vers le dépôt Git à distance (via Beanstalk). Sur ma fin, l' .les fichiers xcodeproj sont arrivés sous un répertoire différent, et les changements n'ont pas fonctionné. Plus tard, quand j'ai essayé de commettre, j'ai reçu une erreur de conflit D'arborescence dans Xcode.

Tree Conflict Screenshot

étant presque impossible à corriger en utilisant Xcode, j'ai remplacé le fichier .xcodeproj par une version téléchargée à partir du serveur Git. Résultat... le projet Xcode a semblé s'éclaircir, cependant toutes les mises à jour de l'attraction corrompue ont été présentées comme des changements que j'ai faits et ont été mis en scène pour un Commit.

Look at all these Mods and Added files

Cependant, en essayant de commettre, Je reçu le même "fatal: impossible de faire un partiel commettre lors d'une fusion d'erreur", discuté ici.

Voici comment j'ai résolu le problème... (Maintenant, comprenez que je suis un programmeur débutant, donc je pourrais manquer de compréhension... mais mon ignorance m'a amené à trouver un autre moyen de le faire. Tout d'abord, J'ai cloné ma branche principale dans une branche secondaire et je suis passé à cette branche. Puis j'ai créé une copie de travail et placé le répertoire sur cette copie de travail en dehors du projet original. répertoire. (Je ne sais pas si c'était nécessaire, mais c'est ce que j'ai fait en lisant d'autres techniques de dépannage. Puis j'ai changé les branches vers le maître, où j'ai réalisé que tous mes fichiers mis en scène (modifications à propager) avaient disparu. Pour m'assurer que tous les fichiers ont été mis à jour aux dernières modifications apportées par l'autre partie, j'ai créé une nouvelle branche appelée ThirdBranch, qui dupliquait tous les fichiers, L'a poussée vers le serveur Git et a laissé Beanstalk comparer ma version serveur de la branche principale à la branche I ThirdBrach. juste poussé (ligne par ligne), et tous les changements par l'autre partie étaient présents sur mon Xcode. Cela signifie que mon référentiel maître et le référentiel maître Git étaient les mêmes, ce qui prouve que j'ai résolu le problème en utilisant Xcode, seulement.

ne me demandez pas comment, au-delà de ce que je viens de décrire... et certainement combler les lacunes que j'avais laissés. Je suis nouvelle et je ne comprends pas tout. Peut-être un programmeur expérimenté peut séparer la pertinence des infos pertinentes et recréer cette technique plus clairement, ce qui explique en partie pourquoi je poste ceci.

il s'agit d'une réponse en double pour dupliquer la question comme à: échec de la fusion Xcode Git est coincé

2
répondu Plexander 2017-06-01 15:01:47

si c'est dans arbre des sources , nous devrions marquer explicitement un fichier comme résolu après les conflits sont résolus. Sélectionner un fichier qui vient d'être résolu à aucun conflit. Puis Actions - > Résoudre Les Conflits - > Marquer Résolu . Si vous avez plusieurs fichiers, faire de même pour tous. S'engager maintenant.

0
répondu cgr 2017-05-30 10:42:10