2009-09-16 20 views
50

Tengo que resolver algunos conflictos después de un git pull.¿Cómo resuelvo un conflicto después de la extracción de 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. 

Así que busqué en Google un poco, y conocer gente diciendo usando git mergetool. Pero esto es lo que obtuve:

$ 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 

¿Significa que tengo que instalar algo?

¿Qué sucede si simplemente quiero que la versión de git pull sobrescriba todo?

+0

Para obtener más información, consulta http://stackoverflow.com/ questions/1064103/is-gits-auto-detection-scripted-or-is-it-within-some-git-executable (con respecto a la forma en que Git propone y busca herramientas de fusión) – VonC

+1

Y puede ver y ejemplo de instalación/configuración un 'mergetool' aquí: http://stackoverflow.com/questions/825478/how-to-set-araxis-as-diff-merge-tool-for-msys-git – VonC

Respuesta

24

No necesita mergetool para esto. Se puede resolver con bastante facilidad de forma manual.

Su conflicto es que sus confirmaciones locales agregaron un archivo, vision_problem_8.h, que una confirmación remota también creó, por un cambio de nombre de vignette_generator_mashed.h. Si ejecuta ls -l vision_problem_8.h*, probablemente verá varias versiones de este archivo que git ha conservado para usted. Uno de ellos será tuyo, otro de ellos será la versión remota. Puede usar un editor o las herramientas que desee para resolver los contenidos en conflicto. Cuando haya terminado, git add los archivos afectados y se compromete a completar la fusión.

Si solo desea utilizar la versión de confirmación remota, entonces puede simplemente mover la copia que no escribió en su lugar y git add.


En cuanto a las herramientas de mezcla, echar un vistazo a git help mergetool. Básicamente, intentará ejecutar cada una de las posibilidades incluidas hasta que encuentre una, o usar una que haya configurado explícitamente.

+0

¡Gracias! Tu me ayudas a resolver el problema ¿Todavía puedo preguntar qué está mal con mi herramienta de mezcla? ¡Gracias y saludos! – Tim

+1

Lo más probable es que no tenga configurada su herramienta de combinación. Use git config --global mergetool. [Tool] .cmd = [command-line call] Puede usar muchas herramientas de diff como kdiff3, tkdiff, xxdiff u otras. Ver http://gitguru.com/2009/02/22/integrating-git-with-a-visual-merge-tool/ – Cesar

5

Si ejecuta la fusión desde un subdirectorio de su proyecto, git ejecutará la fusión para todo el proyecto. Sin embargo, mergetool solo puede ver (y fusionar) archivos en el directorio de trabajo o debajo de él. Por lo tanto, si se produce esta situación, asegúrese de que está tratando de ejecutar su resolución de conflicto desde el directorio de nivel superior en su proyecto.

6

Creo que acabas de olvidar el interruptor "-t" en tu línea de comandos. Según la página de ayuda de git, significa "-t, --tool =", por lo que hace lo que pretendía.

Probar:

git mergetool -t gvimdiff 

Por supuesto, usted puede utilizar su herramienta de combinación preferido en lugar del mío gvimdiff, MELD es grande también ...

+0

Esta sería una mejor respuesta si hubiera alguna explicación de qué cambio '-t' en realidad lo hace, y * por qué * resuelve el problema. – Stewart

+0

@Stewart Hecho. Gracias por la visión! – mano2a0c40

Cuestiones relacionadas