tipos tag remove qué existen etiquetas crear git merge mergetool

tag - ¿Hay alguna manera de hacer que Git marque un archivo como conflictivo?



git remove tag (6)

@VonC: al principio no creé una cuenta (tengo ahora), así que no pude publicar un comentario. Invocar git mergetool no lo detecta, parece:

Auto-merged README CONFLICT (content): Merge conflict in README Automatic merge failed; fix conflicts and then commit the result. lynx:~/test_clone$ ls README lynx:~/test_clone$ git add README lynx:~/test_clone$ git commit -a Created commit 46ee062: It works! lynx:~/test_clone$ ls README lynx:~/test_clone$ cat README >>>>>> 881d60f5f738bc5716f5c9a9384e262b535717fd:README lynx:~/test_clone$ git mergetool merge tool candidates: opendiff emerge vimdiff No files need merging lynx:~/test_clone$

git mergetool puede aceptar un nombre de archivo, pero eso tampoco funciona:

Auto-merged README CONFLICT (content): Merge conflict in README Automatic merge failed; fix conflicts and then commit the result. caracal:~/test_clone2$ git mergetool merge tool candidates: opendiff emerge vimdiff Merging the files: README Normal merge conflict for ''README'': {local}: modified {remote}: modified Hit return to start merge resolution tool (emerge): caracal:~/test_clone2$ ls #*merge*#145962bz# README README~ README.orig caracal:~/test_clone2$ git mergetool merge tool candidates: opendiff emerge vimdiff No files need merging caracal:~/test_clone2$ git mergetool README merge tool candidates: opendiff emerge vimdiff README: file does not need merging caracal:~/test_clone2$ ls #*merge*#145962bz# README README~ README.orig caracal:~/test_clone2$

Tenga en cuenta aquí también que no me comprometí después de salir de Git MergeTool.

Es posible enviar archivos que contengan datos de conflicto. ¿Hay alguna manera de marcar estos archivos como conflictivos nuevamente, de modo que ejecutar git mergetool generará los archivos necesarios y ejecutará la herramienta de fusión?


La solución más elegante sería evitar este problema desde el principio:
git config --global mergetool.[tool].cmd [command-line call]
git config --global mergetool.[tool].trustExitCode false



Por lo que sé, no podrá comprometerse mientras un archivo contenga marcadores de conflicto. ... que no es exactamente cierto:
El OP menciona que puedes (Copio aquí su pastbin ), pero eso no será suficiente para que la herramienta de mezcla se active de nuevo:

Auto-merged README CONFLICT (content): Merge conflict in README Automatic merge failed; fix conflicts and then commit the result. lynx:~/test_clone$ ls README lynx:~/test_clone$ git add README lynx:~/test_clone$ git commit -a Created commit 46ee062: It works! lynx:~/test_clone$ ls README lynx:~/test_clone$ cat README <<<<<<< HEAD:README testingtesting ======= hmm >>>>>>> 881d60f5f738bc5716f5c9a9384e262b535717fd:README lynx:~/test_clone$

Como Charles Bailey comenta e ilustra en esta respuesta SO , se consulta la herramienta merge porque hay 3 instancias del mismo archivo en el índice :

Para un archivo no compartido en un conflicto, git pone a disposición la base común, las versiones local y remota del archivo en el índice. (Aquí es donde se leen para su uso en una herramienta diff de 3 vías por git mergetool .) Puede usar git show para verlos:

# common base: git show :1:afile.txt # ''ours'' git show :2:afile.txt # ''theirs'' git show :3:afile.txt

git add (con cualquier contenido, incluidos los marcadores de conflictos) eliminará automáticamente 2 de ellos, asegurando que mergetool no se vuelva a llamar.


Si el índice ya está en un estado de conflicto, simplemente revise el archivo con el --conflict=merge :

git checkout --conflict=merge file

Si el índice está limpio porque el archivo no resuelto se ha agregado [erróneamente], simplemente reinícielo antes de verificarlo:

git reset file git checkout --conflict=merge file

Esto le permitirá reanudar la resolución de conflictos normalmente (por ejemplo, git mergetool ).

NOTA : Promover un comentario a la respuesta de @ jakub-narębski en su propia respuesta a pedido de @fourpastmidnight. :)


Puede obtener los contenidos del archivo con marcadores de conflicto usando git checkout --conflict=merge -- file , pero si ha limpiado el índice usando git add file (o si la GUI lo hizo por usted) no funcionaría.

Hay git update-index --unresolve , pero es hacky y no funciona de manera confiable. Creo que el estado que restaura no sería suficiente para git-mergetool.

Probablemente git update-index --cacheinfo que git update-index --cacheinfo a combinar, o usar git update-index --cacheinfo para configurar manualmente la versión de etapas ... git-stash puede ayudarte a preservar conflictos correctamente resueltos.