Fehlgeschlagen Xcode Git Merge bleibt hängen

Lesezeit: 5 Minuten

Wir haben ein Git-basiertes Projekt mit einem Freund und einem Master-Zweig. Er hat einige Änderungen an einigen Dateien vorgenommen, ich habe Änderungen an einigen anderen Dateien vorgenommen, und wir haben höchstwahrscheinlich Änderungen an ein paar derselben Dateien vorgenommen. Er hat alle seine Änderungen festgeschrieben und an das Repo gepusht. Dann habe ich meine Änderungen übernommen und versucht, seine Änderungen zu ziehen. Ich wurde mit einigen Konflikten konfrontiert, die ich größtenteils zugunsten seiner Änderungen löste, da es sich um Dateien handelte, die ich nicht geändert hatte. Als ich dann versuchte zu pushen, bekam ich einen fatalen Fehler: Während einer Zusammenführung kann kein partieller Commit ausgeführt werden.

Dies sind die Bildschirme, die ich bekomme.Zeigt die Dateien mit Quellcodeverwaltungsstatus an

Das Fenster, wenn ich versuche, mich zu verpflichten

Die Fehlermeldung

Was kann ich machen? Das Projekt läuft gut, außer dass das Hauptmenü des Spiels nicht die Bilder anzeigt, an denen er gearbeitet hat, und die Klassendateien, an denen er gearbeitet hat, abgesehen von ein paar anderen.

  • Danke für deine Antwort, hat mir geholfen!!!

    – NSPratik

    6. Oktober 2015 um 5:35 Uhr

Benutzer-Avatar
Flavien Volken

Dies ist eine häufig frustrierende Situation:

  1. Öffnen Sie das Terminal
  2. Gehen Sie zu Ihrem Projekt-Repository-Ordner (der die versteckte .git-Datei enthält)
  3. Bewegen Sie Ihren Merge-Kopf beim Tippen zur Seite mv .git/MERGE_HEAD .git/MERGE_HEAD_STUCK

Ihr Problem sollte bereits halb gelöst sein, in manchen Fällen müssen Sie einen Pull vom Organisator machen:

  1. Öffnen Sie den Organizer – Repositories „Datei > Versionsverwaltung > Repositories…“
  2. Suchen Sie das Repository Ihres Projekts und erstellen Sie eine ziehen von hier.

Dann sollten Sie Git wieder von Xcode aus verwenden können, Sie müssen wahrscheinlich einige Merge-Konflikte lösen, aber zumindest wird dies unter Xcode und nicht auf dem Terminal sein.

Hinweis: Erwägen Sie, die .DS_Stores aus Ihrem Git-Repository zu entfernen

Öffnen Sie das Terminal und verwenden Sie Folgendes:

So finden Sie heraus, welche Dateien Konflikte aufweisen: git status

Zusammenführen und Konflikte beheben git mergetool

Möglicherweise müssen Sie einige nicht verfolgte Dateien hinzufügen: git add .

Änderungen abschließend festschreiben git commit

Benutzer-Avatar
GoZoner

Sie können nicht festschreiben, bis alle Zusammenführungskonflikte gelöst sind. Basierend auf dem, was Sie beschrieben haben, gibt es Dateien, die Sie beide geändert haben. Es sind Konflikte, die Sie lösen müssen.

Ich habe noch nie einen Konflikt in Xcode gelöst. Sie können den Konflikt jederzeit über die Terminal-App lösen. Einmal in einem Terminal und vorausgesetzt, Sie haben die Xcode-Befehlszeilentools installiert, versuchen Sie Folgendes:

git mergetool
git commit

Dies wird/sollte ein FileMerge-Fenster öffnen, in dem Sie Ihre oder seine Bearbeitung auswählen können. Die andere Option, die Sie im Terminal haben, besteht darin, die Konflikte zu lösen, indem Sie einfach seine Änderungen akzeptieren. Dadurch wird Ihr Code beschädigt, aber Sie können zurückgehen und ihn reparieren. Versuchen Sie dazu:

git status
git checkout --theirs -- /path/to/a/conflicted/file ...
git add -- /path/to/a/conflicted/file ...
git commit

Bearbeiten Sie dann die Dateien, um Ihre Funktionalität zu korrigieren. Sobald alle Konflikte gelöst sind, können Sie in Xcode zurückschreiben.

Wenn ich Probleme mit XCode habe, kehre ich einfach zu AppCode zurück (Testversion, wenn Sie müssen) und führe einen Commit aus dem Projektordner der obersten Ebene durch.

AppCode erkennt das Zusammenführungsszenario und löst das Problem mit einer teilweisen Zusammenführung. Wenn AppCode es nicht lösen kann, verwende ich den Github-Desktop. Nur wenn dies alles fehlschlägt, werde ich auf Low-Level-Befehle zurückgreifen.

Xcode hat Probleme mit xcuserdata-Dateien und ich musste Änderungen verwerfen und erneut festschreiben

Benutzer-Avatar
Plexander

Ich habe dies mit einem völlig anderen Ansatz gelöst, indem ich nur die Quellcodeverwaltung von Xcode verwendet habe.

Hintergrund: Ein anderes Team hat Änderungen an das Remote-Git-Repository gepusht (über Beanstalk). Auf meiner Seite kamen die .xcodeproj-Dateien in ein anderes Verzeichnis, und die Änderungen wurden nicht übernommen. Später, als ich versuchte zu committen, erhielt ich einen Tree Conflict-Fehler in Xcode.
Baumkonflikt-Screenshot

Da es mit Xcode fast unmöglich zu korrigieren ist, habe ich die .xcodeproj-Datei durch eine heruntergeladene Version vom Git-Server ersetzt. Das Ergebnis … das Xcode-Projekt schien aufzuräumen, aber alle Aktualisierungen aus dem beschädigten Pull wurden als von mir vorgenommene Änderungen angezeigt und für ein Commit bereitgestellt. Sehen Sie sich all diese Mods und hinzugefügten Dateien an Beim Commit-Versuch erhielt ich jedoch den gleichen „fatal: can do a partial commit during a merge“-Fehler, der hier besprochen wird.

So habe ich das Problem gelöst … (Nun verstehen Sie, dass ich ein Anfängerprogrammierer bin, also könnte mir etwas Verständnis fehlen … aber meine Unwissenheit hat mich dazu gebracht, einen anderen Weg zu finden, dies zu tun.) Zuerst habe ich meinen Meister geklont Verzweigen Sie in eine sekundäre Verzweigung und wechseln Sie zu dieser Verzweigung. Dann habe ich eine Arbeitskopie erstellt und das Verzeichnis in dieser Arbeitskopie außerhalb des ursprünglichen Projektverzeichnisses abgelegt. (Ich weiß nicht, ob dies notwendig war, aber ich habe es getan, als ich andere Fehlerbehebungstechniken gelesen habe.) Dann habe ich die Branches zum Master gewechselt, wo ich festgestellt habe, dass alle meine Staging-Dateien (Änderungen an Commit) verschwunden sind. Um sicherzustellen, dass alle Dateien auf die neuesten Änderungen der anderen Partei aktualisiert wurden, habe ich einen neuen Branch namens ThirdBranch erstellt, der alle Dateien dupliziert, auf den Git-Server gepusht und Beanstalk meine Serverversion des Master-Branch mit dem verglichen hat ThirdBrach-Zweig, den ich gerade gepusht habe (Zeile für Zeile), und alle Änderungen der anderen Partei waren auf meinem Xcode vorhanden. Dies bedeutete, dass mein Master-Repository und das Git-Master-Repository identisch waren, was bestätigt, dass ich das Problem nur mit Xcode gelöst habe.

Frag mich nicht wie, über das hinaus, was ich gerade beschrieben habe… und fülle auf jeden Fall die Lücken aus, die ich ausgelassen habe. Ich bin neu hier und verstehe nicht alles. Vielleicht kann ein erfahrener Programmierer die irrelevanten Informationen von den relevanten trennen und diese Technik klarer nachbilden, was zum Teil der Grund ist, warum ich dies poste.

1143800cookie-checkFehlgeschlagen Xcode Git Merge bleibt hängen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy