Wenn ich versuche, mein Projektverzeichnis im Terminal abzurufen, wird der folgende Fehler angezeigt:
harsukh@harsukh-desktop:~/Sites/branch1$ git pull origin master
U app/config/app.php
U app/config/database.php
U app/routes.php
Pull is not possible because you have unmerged files.
Please, fix them up in the work tree, and then use 'git add/rm <file>'
as appropriate to mark resolution, or use 'git commit -a'.
Warum sagt git "Pull is not possible because you have unmerged files"
und wie kann ich das beheben?
git
git-pull
merge-conflict-resolution
git-fetch
Harsukh Makwana
quelle
quelle
Antworten:
Was derzeit passiert, ist, dass Sie über einen bestimmten Satz von Dateien verfügen, die Sie zuvor zusammengeführt haben, die jedoch Zusammenführungskonflikte ausgelöst haben. Wenn ein Zusammenführungskonflikt auftritt, sollte er diese im Idealfall manuell lösen und die Änderungen mithilfe von festschreiben
git add file.name && git commit -m "removed merge conflicts"
. Jetzt hat ein anderer Benutzer die fraglichen Dateien in seinem Repository aktualisiert und seine Änderungen auf das gemeinsame Upstream-Repo übertragen.Es kommt also vor, dass Ihre Zusammenführungskonflikte aus (wahrscheinlich) dem letzten Commit nicht gelöst wurden, sodass Ihre Dateien nicht in Ordnung zusammengeführt werden und daher das Flag
U
(unmerged
) für die Dateien. Wenn Sie also agit pull
ausführen, gibt git den Fehler aus, da Sie eine Version der Datei haben, die nicht korrekt behoben wurde.Um dies zu beheben, müssen Sie die fraglichen Zusammenführungskonflikte lösen und die Änderungen hinzufügen und festschreiben, bevor Sie eine ausführen können
git pull
.Beispielreproduktion und Lösung des Problems:
Lassen Sie uns zunächst die Repository-Struktur erstellen
Jetzt sind wir in repo_clone und wenn Sie a tun
git pull
, wird es Konflikte auslösenWenn wir die Konflikte im Klon ignorieren und jetzt mehr Commits im ursprünglichen Repo vornehmen,
Und dann machen wir ein
git pull
, wir bekommenBeachten Sie, dass sich das
file
Jetzt in einem nicht zusammengeführten Zustand befindet. Wenn wir a ausführengit status
, können wir dasselbe deutlich sehen:Um dies zu lösen, müssen wir zuerst den Zusammenführungskonflikt lösen, den wir zuvor ignoriert haben
und setzen Sie seinen Inhalt auf
und fügen Sie es dann hinzu und übernehmen Sie die Änderungen
quelle
Sie versuchen, Ihrem lokalen Zweig weitere neue Commits hinzuzufügen, während Ihr Arbeitsverzeichnis nicht sauber ist. Infolgedessen weigert sich Git, den Pull durchzuführen. Betrachten Sie die folgenden Diagramme, um das Szenario besser zu veranschaulichen:
Es gibt zwei Möglichkeiten, um mit dieser Situation umzugehen. Sie können die Änderungen in Ihren Dateien entweder verwerfen oder beibehalten.
Option 1: Änderungen wegwerfen
Sie können entweder
git checkout
für jede nicht zusammengeführte Datei verwenden odergit reset --hard HEAD
alle Dateien in Ihrem Zweig auf HEAD zurücksetzen. Übrigens ist HEAD in Ihrer lokalen Niederlassung B ohne Sternchen. Wenn Sie diese Option wählen, wird das Diagramm wie folgt:Wenn Sie jetzt ziehen, können Sie Ihren Zweig mit den Änderungen vom Master vorspulen. Nach dem Ziehen würde Ihr Zweig wie ein Meister aussehen:
Option 2: Behalten Sie die Änderungen bei
Wenn Sie die Änderungen beibehalten möchten, müssen Sie zuerst alle Zusammenführungskonflikte in jeder der Dateien lösen. Sie können jede Datei in Ihrer IDE öffnen und nach folgenden Symbolen suchen:
Git präsentiert Ihnen zwei Codeversionen. Der in den HEAD-Markern enthaltene Code ist die Version Ihrer aktuellen lokalen Niederlassung. Die andere Version kommt von der Fernbedienung. Nachdem Sie eine Version des Codes ausgewählt (und den anderen Code zusammen mit den Markierungen entfernt) haben, können Sie jede Datei durch Eingabe zu Ihrem Staging-Bereich hinzufügen
git add
. Der letzte Schritt besteht darin, Ihr Ergebnis durch Eingabegit commit -m
einer entsprechenden Nachricht festzuschreiben. Zu diesem Zeitpunkt sieht unser Diagramm folgendermaßen aus:Hier habe ich das Commit, das wir gerade gemacht haben, als C 'bezeichnet, weil es sich vom Commit C auf der Fernbedienung unterscheidet. Wenn Sie nun versuchen zu ziehen, wird ein nicht schneller Vorlauffehler angezeigt. Git kann die Änderungen in Remote auf Ihrem Zweig nicht abspielen, da sowohl Ihr Zweig als auch die Fernbedienung vom Commit B des gemeinsamen Vorfahren abweichen. Wenn Sie zu diesem Zeitpunkt ziehen möchten, können Sie entweder einen anderen
git merge
odergit rebase
Ihren Zweig auf der Fernbedienung ausführen.Um Git zu beherrschen, muss man in der Lage sein, unidirektionale verknüpfte Listen zu verstehen und zu bearbeiten. Ich hoffe, diese Erklärung bringt Sie dazu, in die richtige Richtung über die Verwendung von Git nachzudenken.
quelle
Es gibt eine einfache Lösung dafür. Dafür müssen Sie jedoch zunächst Folgendes lernen
Um Konflikte zu entfernen, können Sie verwenden
Der obige Befehl öffnet grundsätzlich die lokale Datei, die gemischte Datei und die entfernte Datei (insgesamt 3 Dateien) für jede in Konflikt stehende Datei. Die lokalen und Remote-Dateien dienen nur als Referenz. Mithilfe dieser Dateien können Sie auswählen, was in die gemischte Datei aufgenommen werden soll (oder nicht). Und speichern und beenden Sie einfach die Datei.
quelle
Wenn Sie die Änderungen nicht zusammenführen und dennoch Ihr lokales aktualisieren möchten, führen Sie Folgendes aus:
Dadurch wird Ihr lokales Gerät mit HEAD zurückgesetzt und Ihre Fernbedienung mit git pull gezogen.
Wenn Sie Ihre Zusammenführung bereits lokal festgeschrieben haben (aber noch nicht auf Remote übertragen haben) und sie auch zurücksetzen möchten:
quelle
Wenn Sie einen Remote-Zweig herunterziehen möchten, um ihn lokal auszuführen (z. B. zu Überprüfungs- oder Testzwecken), und wenn Sie
$ git pull
lokale Zusammenführungskonflikte erhalten:quelle
Sie haben einige Dateien lokal, die zusammengeführt werden müssen, bevor Sie ziehen können. Sie können die Dateien auschecken und dann ziehen, um Ihre lokalen Dateien zu überschreiben.
quelle
Schritte zum folgen :
Danke, Sarbasish
quelle
Bei mir gab es das gleiche Problem. In meinem Fall sind die Schritte wie folgt:
Hier ist die Nachricht, die erschienen ist -
und die jeweils 2 und 1 unterschiedliche Festschreibungen haben. Sie haben ungebundene Wege.
(use "git pull" to merge the remote branch into yours)
(fix conflicts and run "git commit")
Nicht zusammengeführte Pfade:
(Verwenden Sie "git add ...", um die Auflösung zu markieren.)
Welche Runde kann mit diesem Bild behoben werden -
quelle
Wenn ein Zusammenführungskonflikt auftritt, können Sie einzelne Dateien öffnen. Sie erhalten Symbole "<<<<<<< oder >>>>>>>". Diese beziehen sich auf Ihre Änderungen und die auf der Fernbedienung vorhandenen Änderungen. Sie können das erforderliche Teil manuell bearbeiten. Speichern Sie danach die Datei und führen Sie Folgendes aus: git add
Die Zusammenführungskonflikte werden gelöst.
quelle
Führen Sie einfach diesen Befehl aus:
quelle