Domanda

Devo risolvere alcuni conflitti dopo un 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.

Quindi ho cercato su Google un po 'e ho trovato persone che dicevano di usare git mergetool . Ma ecco cosa 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 significa che devo installare qualcosa?

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

È stato utile?

Soluzione

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

Il tuo conflitto è che i tuoi commit locali hanno aggiunto un file, vision_problem_8.h , creato anche da un commit remoto, rinominando 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 sarà tuo, un altro sarà la versione remota. Puoi utilizzare un editor o qualsiasi altro strumento ti piaccia per risolvere i contenuti in conflitto. Al termine, git add i file interessati e si impegnano a completare l'unione.

Se vuoi solo usare la versione del commit remoto, puoi semplicemente spostare la copia che non hai scritto in posizione e git add .


Per quanto riguarda gli strumenti di unione, dai un'occhiata a git help mergetool . Fondamentalmente, proverà a eseguire ciascuna delle possibilità incluse fino a quando non ne troverà una, o userà una che hai configurato esplicitamente.

Altri suggerimenti

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

Prova:

git mergetool -t gvimdiff

Ovviamente puoi usare il tuo strumento di unione preferito al posto del mio gvimdiff, anche la fusione è fantastica ...

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

E se volessi semplicemente che la versione di git pull sovrascrivesse tutto? Se vuoi solo che dovresti usare:

 git fetch
 git reset --hard origin/your-branch-name
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top