2009-09-16 17 views
50

Muszę rozwiązać jakiś konflikt po git pull.Jak rozwiązać konflikt po uruchomieniu git?

$ 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. 

Więc google to trochę i znaleźć ludzi mówiących użyciu git mergetool. Ale oto, co mam:

$ 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 

Czy to znaczy, że muszę coś zainstalować?

Co, jeśli po prostu chcę, aby wersja z git pull nadpisała wszystko?

+0

Aby uzyskać więcej informacji, zobacz również http://stackoverflow.com/ questions/1064103/is-gits-auto-detection-scripted-or-is-it-in-some-git-executable (w zależności od sposobu, w jaki Git proponuje i wyszukiwania narzędzi do scalania) – VonC

+1

Możesz zobaczyć i przykład instalacji/ustawienia "mergetool" tutaj: http://stackoverflow.com/questions/825478/how-to-set-araxis-as-diff-merge-tool-for-msys-git – VonC

Odpowiedz

24

Do tego nie potrzebujesz mergetool. Można go łatwo rozwiązać ręcznie.

Konfliktem jest to, że lokalne zatwierdzenia dodały plik, vision_problem_8.h, że zdalne zatwierdzenie również zostało utworzone po zmianie nazwy z vignette_generator_mashed.h. Jeśli uruchomisz ls -l vision_problem_8.h* prawdopodobnie zobaczysz wiele wersji tego pliku, które git zachował dla ciebie. Jedna z nich będzie twoja, druga będzie wersją zdalną. Możesz użyć edytora lub dowolnych narzędzi do rozwiązania konfliktu treści. Kiedy skończysz, git add dotknięte pliki i zobowiązują się do ukończenia scalania.

Jeśli chcesz tylko użyć wersji zdalnego zatwierdzania, możesz po prostu przenieść kopię, której nie zapisałeś na miejsce, i git add ją.


Odnośnie narzędzi do scalania, spójrz na numer git help mergetool. Zasadniczo spróbuje uruchomić każdą z dostarczonych możliwości, dopóki nie znajdzie jednego, lub użyć takiego, które zostało jawnie skonfigurowane.

+0

Dzięki! Pomagasz mi rozwiązać problem. Czy nadal mogę zapytać, co jest nie tak z moim mergetoolem? Dziękuję i pozdrawiam! – Tim

+1

Najprawdopodobniej nie masz skonfigurowanej sieci Mergetool. Użyj git config --global mergetool. [Narzędzie] .cmd = [polecenie linii poleceń] Możesz użyć wielu narzędzi diff, takich jak kdiff3, tkdiff, xxdiff lub wiele innych. Zobacz http://gitguru.com/2009/02/22/integrating-git-with-a-visual-merge-tool/ – Cesar

5

Jeśli uruchomisz scalenie z podkatalogu projektu, git uruchomi scalenie dla całego projektu. Jednak mergetool może tylko widzieć (i scalać) pliki w katalogu roboczym lub pod nim. Jeśli wystąpi taki scenariusz, upewnij się, że próbujesz uruchomić rozwiązanie konfliktu z katalogu najwyższego poziomu w projekcie.

6

Myślę, że po prostu zapomniałeś "-t" w linii poleceń. Według strony pomocy git oznacza "-t, --tool =", więc robi to, co zamierzałeś.

Spróbuj:

git mergetool -t gvimdiff 

Oczywiście można użyć narzędzia do scalania preferowany zamiast kopalni gvimdiff, Meld jest zbyt wielkie ...

+0

Byłaby to lepsza odpowiedź, gdyby istniało wyjaśnienie, co właściwie oznacza przełącznik '-t' robi i * dlaczego * rozwiązuje problem. – Stewart

+0

@ Stewart Gotowe. Dzięki za wgląd! – mano2a0c40

Powiązane problemy