Git-fout bij commit na merge – fataal: kan geen gedeeltelijke commit doen tijdens een merge

Ik heb een git pulluitgevoerd die eindigde in een conflict. Ik heb het conflict opgelost en alles is nu in orde (ik heb ook mergetool gebruikt).

Als ik het opgeloste bestand commit met git commit file.php -m "message"krijg ik de foutmelding:

fatal: cannot do a partial commit during a merge.

Ik had eerder hetzelfde probleem en het gebruik van -ain commit werkte perfect. Ik denk dat dit niet de perfecte manier is, omdat ik niet alle wijzigingen wil vastleggen. Ik wil bestanden apart vastleggen met aparte opmerkingen. Hoe kan ik dat doen? Waarom staat git gebruikers niet toe om bestanden afzonderlijk vast te leggen na een merge? Ik kon geen bevredigend antwoord op dit probleem vinden.


Antwoord 1, autoriteit 100%

Ik ontdekte dat het toevoegen van “-i” aan het commit-commando dit probleem voor mij oplost. De -i vertelt het in feite om extra bestanden te stagen voordat het wordt vastgelegd.
Dat is:

git commit -i myfile.php

Antwoord 2, autoriteit 26%

git commit -am 'Conflicts resolved'

Dit werkte voor mij. Je kunt dit ook proberen.


Antwoord 3, autoriteit 8%

Je kunt in de meeste gevallen git commit -igebruiken, maar als het niet werkt

Je moet git commit -m "your_merge_message"doen. Tijdens een samenvoegconflict kunt u geen enkel bestand samenvoegen, dus u moet

  1. Alleen het conflicterende bestand uitvoeren ( git add your_file.txt)
  2. git commit -m "your_merge_message"

Antwoord 4, autoriteit 4%

Je hebt waarschijnlijk een conflict over iets dat je niet hebt voorbereid om te committen. git laat je niet dingen onafhankelijk vastleggen (omdat het allemaal deel uitmaakt van de samenvoeging, denk ik), dus je moet dat bestand git adden dan git commit -m "Merge conflict resolution". De -ivlag voor git commitdoet de toevoeging voor je.


Antwoord 5, autoriteit 4%

Ik kreeg dit toen ik de -min mijn git-commit vergat bij het oplossen van een git merge-conflict.

git commit "commit message"

zou moeten zijn

git commit -m "commit message"

Antwoord 6, autoriteit 2%

Zoals de foutmelding zegt dat je geen gedeeltelijke commit kunt doen na een merge. In plaats van alleen file.phpvast te leggen, moet je alle wijzigingen vastleggen.

Dit zou moeten werken.

git commit -m "Fixing merge" 

Antwoord 7

Je samenvoeging stopte midden in de actie.
Je moet je bestanden toevoegen, en dan ‘git commit’:


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

Proost


Antwoord 8

  1. ga naar je projectdirectory
    1. toon verborgen bestanden (.git map zal verschijnen)
    2. open de .git-map
    3. verwijder MERGE_HEAD
    4. opnieuw vastleggen
    5. als git je heeft verteld dat git is vergrendeld, ga dan terug naar de .git-map en verwijder index.lock
    6. commit opnieuw, alles zal deze keer goed werken.

Antwoord 9

Als je gewoon de hele cherry-picking en commit-bestanden wilt dumpen in welke sets je maar wilt,

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

helpt je daar.

Wat een zachte reset doet, is dat de aanwijzer naar de huidige HEAD wordt verplaatst naar de commit(ish) die je hebt opgegeven, maar de bestanden niet verandert. Een harde reset zou de aanwijzer verplaatsen en ook alle bestanden terugzetten naar de staat in die commit (ish). Dit betekent dat u met zachte reset de samenvoegstatus kunt wissen, maar de wijzigingen aan de werkelijke bestanden kunt behouden en ze vervolgens naar wens kunt vastleggen of opnieuw instellen.


Antwoord 10

Het lijkt erop dat je -m hebt gemist voor het commit-commando


Antwoord 11

Voor mezelf gebeurde dit in SourceTree toen ik probeerde een merge door te voeren voordat ik alle bestanden had opgelost. Ik heb toen het laatste bestand als opgelost gemarkeerd en toch gaf het me nog steeds deze fout bij het proberen vast te leggen. Ik sloot SourceTree af en heropende het, en toen beging het een boete.


Antwoord 12

Ik heb dit opgelost met een geheelaanpak, waarbij ik alleen Bronbeheer van Xcode gebruikte.

Achtergrond: een ander team heeft wijzigingen doorgevoerd in de externe Git-repository (via Beanstalk). Aan mijn kant kwamen de .xcodeproj-bestanden in een andere map binnen en werden de wijzigingen niet doorgevoerd. Later, toen ik probeerde te committen, kreeg ik een Tree Conflict-fout in Xcode.

Omdat het bijna onmogelijk te corrigeren was met Xcode, heb ik het bestand .xcodeprojvervangen door een gedownloade versie van de Git-server. Het resultaat… het Xcode-project leek op te lossen, maar alle updates van de corrupte Pull kwamen naar voren als wijzigingen die ik aanbracht en werden opgevoerd voor een Commit.

Tijdens het proberen te plegen, ontving ik hetzelfde “fataal: kan geen gedeeltelijke commit uitvoeren tijdens een merge” fout, hier besproken.

Hier is hoe ik het probleem opgelost … (nu, begrijp dat ik een rookie-programmeur ben, dus ik kon een beetje begrip hebben … maar mijn onwetendheid leidde me om dit te doen.) Ten eerste, ik Kloneerde mijn hoofdtak in een secundaire tak en ging over naar die tak. Dan heb ik een werkkopie gemaakt en de map geplaatst op die werkkopie buiten de originele projectdirectory. (Ik weet niet of dit noodzakelijk was, maar het is wat ik deed omdat ik andere technieken voor probleemoplossing lees.) Dan schakelde ik takken over naar de meester, waar ik al mijn geënsceneerde bestanden realiseerde (veranderingen in commit) waren verdwenen. Om ervoor te zorgen dat alle bestanden zijn bijgewerkt naar de laatste wijzigingen die door de andere partij zijn gemaakt, creëerde ik een nieuwe branch met de naam Thirdbranch, die alle bestanden heeft gedupliceerd, duwde het naar de GIT-server en laat BeanStalk mijn serverversie van de Master Branch in BeanStalk vermengd ThirdBrach Branch Ik duwde gewoon (lijn per regel) en alle veranderingen door de andere partij waren aanwezig op mijn Xcode. Dit betekende dat mijn Master Repository en de Git Master Repository hetzelfde waren, die controleert dat ik alleen het probleem opgelost met Xcode.

Vraag me niet hoe, voorbij wat ik net heb beschreven … en zeker de gaten invult die ik heb weggelaten. Ik ben hier nieuw en ik begrijp niet alles. Misschien kan een ervaren programmeur de irrelevante info scheiden van de relevante en recreëren deze techniek duidelijker, wat gedeeltelijk is waarom ik dit post.

Dit is een duplicaat antwoord op dubbele vraag als op: Mislukte Xcode Git-samenvoeging zit vast


13

Soms tijdens de samenvoeging, als conflicten zich voordoen en er delta’s zijn die handmatige resolutie nodig hebben. Bevestig in dat geval de handmatige resolutie voor de genoemde bestanden.

Nu als u afgifte,

git status Lib/MyFile.php

U ziet de uitvoer zoals

On branch warehouse
Your branch and 'origin/warehouse' have diverged,
and have 1 and 1 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)
All conflicts fixed but you are still merging.
  (use "git commit" to conclude merge)
Changes to be committed:
    modified:   Lib/MyFile.php

Aangezien u de commit al hebt georgeld, heeft u alleen een probleem nodig

git commit

en uw commit zal zonder enige kwestie worden gedaan.


14

Tijdens een samenvoeging wil Git de bovenliggende takken voor allerlei redenen bijhouden. Wat je wilt doen is geen samenvoeging omdat Git het ziet. U wilt waarschijnlijk handmatig een rebase of cherry-pick doen.


Antwoord 15

Na het lezen van alle opmerkingen. dit was mijn resolutie:
Ik moest het opnieuw “Toevoegen” dan vastleggen:

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

Antwoord 16

Als je de bronstructuur of een andere GUI gebruikt, zorg er dan voor dat alle bestanden zijn aangevinkt (na het samenvoegen).


Antwoord 17

Als het zich in de Bronstructuurbevindt, moeten we een bestand expliciet markeren als opgelost nadat de conflicten zijn opgelost. Selecteer bestanddat zojuist is opgelost zonder conflicten. Dan Acties -> Conflicten oplossen -> Markeren als opgelost. Als je meerdere bestanden hebt, doe dan hetzelfde voor iedereen. Leg je nu vast.

Other episodes