2009-09-16 9 views
50

Ich muss einen Konflikt nach einem git pull lösen.Wie behebe ich einen Konflikt nach Git Pull?

$ git pull 
CONFLICT (rename/add): Renamed vignette_generator_mashed.h->vision_problem_8.h in 49423dd0d47abe6d839a783b5517bdfd200a202f. vision_problem_8.h added in HEAD 
Added as vision_problem_8.h~HEAD_1 instead 
Removed vignette_generator_cross_square.cc 
Automatic merge failed; fix conflicts and then commit the result. 

So gegoogelt ich es ein wenig und fand Menschen mit git mergetool sagen. Aber hier ist, was ich habe:

$ git mergetool 
merge tool candidates: meld kdiff3 tkdiff xxdiff meld gvimdiff emerge opendiff emerge vimdiff 
No files need merging 
$ git mergetool opendiff 
merge tool candidates: meld kdiff3 tkdiff xxdiff meld gvimdiff emerge opendiff emerge vimdiff 
opendiff: file not found 

Also heißt es, ich muss etwas installieren?

Was ist, wenn ich einfach die Version von git pull alles überschreiben möchte?

+0

Weitere Informationen finden Sie auch http://stackoverflow.com/ Fragen/1064103/is-gits-auto-detection-scripted-oder-ist-es-in-einigen-git-executable (in Bezug auf die Art, wie Git schlägt und Suche nach Merge-Tools) – VonC

+1

Und Sie können sehen und Beispiel für die Installation/Einstellung ein 'mergetool' hier: http://stackoverflow.com/questions/825478/how-to-set-araxis-as-diff-merge-tool-for-msys-git – VonC

Antwort

24

Sie benötigen dazu kein mergetool. Es kann ziemlich leicht manuell behoben werden.

Ihr Konflikt ist, dass Ihre lokalen Commits eine Datei hinzugefügt, , die eine Remote-Commit auch erstellt, durch eine Umbenennung von vignette_generator_mashed.h. Wenn Sie ls -l vision_problem_8.h* ausführen, werden Sie wahrscheinlich mehrere Versionen dieser Datei sehen, die git für Sie gespeichert hat. Einer von ihnen wird dein sein, ein anderer von ihnen wird die Remote-Version sein. Sie können einen Editor oder andere Werkzeuge verwenden, um die widersprüchlichen Inhalte zu lösen. Wenn Sie fertig sind, git add die betroffenen Dateien und verpflichten, die Zusammenführung abzuschließen.

Wenn Sie nur die Remote-Commit-Version verwenden möchten, dann können Sie einfach die Kopie verschieben, die Sie nicht an Ort und Stelle geschrieben haben und git add es.


In Bezug auf die Merge-Tools, haben einen Blick auf git help mergetool. Im Grunde wird es versuchen, jede der eingeschlossenen Möglichkeiten auszuführen, bis sie eine findet oder eine verwendet, die Sie explizit konfiguriert haben.

+0

Danke! Sie helfen mir, das Problem zu lösen. Darf ich noch fragen, was mit meinem Mergetool los ist? Danke und Grüße! – Tim

+1

Wahrscheinlich haben Sie Ihr Mergetool nicht konfiguriert. Verwenden Sie git config --global mergetool. [Tool] .cmd = [Befehlszeilenaufruf] Sie können viele Diff-Tools wie kdiff3, tkdiff, xxdiff oder viele andere verwenden. Siehe http://gitguru.com/2009/02/22/integrating-git-with-a-visual-merge-tool/ – Cesar

5

Wenn Sie Ihre Zusammenführung aus einem Unterverzeichnis Ihres Projekts ausführen, wird Git die Zusammenführung für Ihr gesamtes Projekt ausführen. Allerdings kann mergetool nur Dateien in oder unter dem Arbeitsverzeichnis anzeigen (und zusammenführen). Wenn dieses Szenario auftritt, stellen Sie sicher, dass Sie versuchen, die Konfliktlösung aus dem Verzeichnis der obersten Ebene in Ihrem Projekt auszuführen.

6

Ich glaube, Sie haben nur "-t" Schalter an Ihrer Befehlszeile vergessen. Laut git help page steht es für "-t, --tool =" damit es macht, was du vorhast.

Versuchen:

git mergetool -t gvimdiff 

Natürlich können Sie Ihre bevorzugte Merge-Tool anstelle von mir gvimdiff verwenden, meld ist auch toll ...

+0

Dies wäre eine bessere Antwort, wenn es eine Erklärung dafür gäbe, was der Schalter '-t' eigentlich ist tut, und * warum * löst es das Problem. – Stewart

+0

@Stewart Fertig. Danke für die Einsicht! – mano2a0c40