2009-09-16 15 views
50

Devo risolvere qualche conflitto dopo un git pull.Come posso risolvere un conflitto dopo 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. 

Così ho Googled un po ', e hanno trovato persone che dicono usando git mergetool. Ma ecco quello che ho ottenuto:

$ 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 

Quindi vuol dire che devo installare qualcosa?

E se volessi semplicemente che la versione da git pull sovrascriva tutto?

+0

Per informazioni, puoi anche http://stackoverflow.com/ domande/1064103/is-gits-auto-detection-scripted-o-is-it-within-some-git-eseguibile (riguardo al modo in cui Git propone e ricerca strumenti di unione) – VonC

+1

E puoi vedere ed esempio di installazione/impostazione un 'mergetool' qui: http://stackoverflow.com/questions/825478/how-to-set-araxis-as-diff-merge-tool-for-msys-git – VonC

risposta

24

Non hai bisogno di mergetool per questo. Può essere risolto abbastanza facilmente manualmente.

Il tuo conflitto è che il tuo locale commette aggiunto un file, vision_problem_8.h, che un commit remoto ha anche creato, con un cambio di nome da vignette_generator_mashed.h. Se esegui ls -l vision_problem_8.h* probabilmente vedrai più versioni di questo file che git ha conservato per te. Uno di questi sarà tuo, un altro di loro sarà la versione remota. Puoi utilizzare un editor o qualsiasi altro strumento ti piaccia per risolvere i contenuti in conflitto. Quando hai finito, git add i file interessati e si impegnano a completare l'unione.

Se si desidera utilizzare solo la versione di commit remoto, è sufficiente spostare la copia che non è stata scritta in posizione e git add.


Per quanto riguarda gli strumenti di unione, uno sguardo ai git help mergetool. Fondamentalmente, tenterà di eseguire ognuna delle possibilità incluse fino a quando non ne trova una, o usarne una che si è esplicitamente configurata.

+0

Grazie! Mi aiuti a risolvere il problema. Posso chiedere ancora cosa c'è di sbagliato nel mio mergetool? Grazie e saluti! – Tim

+1

Molto probabilmente non hai configurato il tuo mergetool. Usa git config --global mergetool. [Tool] .cmd = [call-line call] Puoi usare molti strumenti diff come kdiff3, tkdiff, xxdiff o molti altri. Vedi http://gitguru.com/2009/02/22/integrating-git-with-a-visual-merge-tool/ – Cesar

5

Se si esegue l'unione da una sottodirectory del progetto, git eseguirà l'unione per l'intero progetto. Tuttavia, mergetool può solo vedere (e unire) i file all'interno o al di sotto della directory di lavoro. Quindi, se si verifica questo scenario, assicurarsi di provare a eseguire la risoluzione dei conflitti dalla directory di livello superiore del progetto.

6

Penso che hai appena dimenticato "-t" passare alla riga di comando. Secondo la pagina di aiuto di git sta per "-t, --tool =" quindi rende ciò che intendevi.

Prova:

git mergetool -t gvimdiff 

Naturalmente è possibile utilizzare il vostro strumento di unione preferito al posto di mia gvimdiff, fusione è troppo grande ...

+0

Questa sarebbe una risposta migliore se ci fosse qualche spiegazione su cosa lo switch '-t' effettivamente fa e * perché * risolve il problema. – Stewart

+0

@Stewart Fatto. Grazie per l'intuizione! – mano2a0c40

Problemi correlati