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 favor, use git update-index --unresolve
Dado que git 1.7 usa la información de resolver-deshacer del índice para restaurar las 3 etapas (1: base, 2: la nuestra, 3: la suya): https://github.com/git/git/commit/8aa38563b22c84b06ea1fff9638cc1f44fda726f
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.