Como se preguntó en esta pregunta , también quiero saber cómo resolver un conflicto git stash popsin agregar todas las modificaciones a una confirmación (al igual que "git stash pop" sin conflicto).
Mi enfoque actual es muy poco interesante porque lo hago de esta manera:
git stash pop -> CONFLICT
git stash drop
[resolve conflict]
[add conflict files]
git reset HEAD <all files that are in commit-mode>
[Actualización] Una forma de reproducirlo:
mkdir foo; cd foo; git init
echo "1" > one
echo "2" > two
git add -A; git commit -m "first"
echo "1.1" > one
echo "2.1" > two
git stash
echo "2.2" > two
git commit -a -m "second"
echo "Only this file would stay in HEAD without the conflict" > third
git add third
git stash pop
git status
2016-06-27: se agregó un nuevo archivo llamado 'tercero' al ejemplo para mostrar que soluciones alternativas como la solución de scy solo funcionan para HEADs vacías pero no solucionan el problema inicial de que HEAD no tiene el mismo contenido como para un git stash popsin conflicto.

git addresolvió sus archivos de conflicto, organizándolos efectivamente en el índice, y no desea tenerlos en nuestro índice?git stash poptiene cuando no se produce ningún conflicto (pero con la notificación de qué archivos deben fusionarse).Respuestas:
No sigas otras respuestas
Bueno, puedes seguirlos :). Pero no creo que hacer una confirmación y luego restablecer la rama para eliminar esa confirmación y soluciones similares sugeridas en otras respuestas sean la forma más clara de resolver este problema.
Solución limpia
La siguiente solución parece ser mucho más limpia para mí y también es sugerida por el propio Git : intente ejecutar
git statusen el repositorio con un conflicto:Entonces, hagamos lo que Git sugiere (sin hacer ninguna confirmación inútil):
git resetpara marcar los conflictos como resueltos y desestabilizar los cambios. Puede ejecutarlo sin ningún parámetro y Git eliminará todo del índice. No tienes que ejecutargit addantes.git stash drop, porque Git no lo hace en caso de conflicto.Traducido a la línea de comandos:
Explicación del comportamiento predeterminado.
Hay dos formas de marcar los conflictos como resueltos:
git addygit reset. Mientrasgit resetmarca los conflictos como resueltos y elimina los archivos del índice,git addtambién marca los conflictos como resueltos, pero mantiene los archivos en el índice.Agregar archivos al índice después de resolver un conflicto es a propósito. De esta manera, puede diferenciar los cambios del alijo anterior y los cambios que realizó después de que se resolvió el conflicto. Si no le gusta, siempre puede usar
git resetpara eliminar todo del índice.Herramientas de fusión
Recomiendo usar cualquiera de las herramientas de combinación de 3 vías para resolver conflictos, por ejemplo , KDiff3 , Meld , etc., en lugar de hacerlo manualmente. Por lo general, resuelve todos o la mayoría de los conflictos automáticamente. ¡Es un gran ahorro de tiempo!
fuente
git stash popfalla con los conflictos.git stash dropmenos que desee mantener ese alijo.Supongamos que tiene este escenario en el que oculta sus cambios para extraerlos del origen. Posiblemente porque sus cambios locales son solo
debug: trueen algunos archivos de configuración. Ahora tiras y alguien ha introducido una nueva configuración allí, creando un conflicto.git statusdice:Bueno. Decidí seguir con lo que Git sugirió: resolví el conflicto y me comprometí:
Ahora mi copia de trabajo está en el estado que quiero, pero he creado una confirmación que no quiero tener. ¿Cómo me deshago de esa confirmación sin modificar mi copia de trabajo? ¡Espera, hay un comando popular para eso!
Mi copia de trabajo no ha cambiado, pero la confirmación WIP se ha ido. Eso es exactamente lo que quería! (Tenga en cuenta que no lo estoy usando
--softaquí, porque si hay archivos fusionados automáticamente en su alijo, se almacenan automáticamente y, por lo tanto, terminaría con estos archivos nuevamentereset).Pero queda una cosa más: la página del manual
git stash popnos recuerda que "la aplicación del estado puede fallar con los conflictos; en este caso, no se elimina de la lista oculta. Es necesario resolver los conflictos a mano y llamargit stash dropmanualmente después". Entonces eso es exactamente lo que hacemos ahora:Y hecho.
fuente
git add <resolved conflict files>seguirgit reset HEAD?git stash popsin un conflicto. Simplemente agregue otro archivo a HEAD antes de hacer el conflictogit stash popygit commit -a -m WIPluego también agregaría el nuevo archivo al commit. Pero sin un conflicto, solo el nuevo archivo permanecería en HEAD pero no losgit stash poparchivos.^se usa como una continuación de línea especial y lo dejará sentado en un Más? preguntar en lugar de ejecutar el comando. En lugar de utilizar:git reset --soft HEAD~1. ¿En lugar de agregar los cambios que realice para resolver el conflicto, puede usarlo
git reset HEAD filepara resolver el conflicto sin organizar sus cambios.Sin embargo, es posible que deba ejecutar este comando dos veces. Una vez para marcar el conflicto como resuelto y una vez para desestimar los cambios organizados por la rutina de resolución de conflictos.
Es posible que haya un modo de reinicio que haga ambas cosas simultáneamente, aunque ahora no hay ninguno.
fuente
trabajó para mi.
Nota : esto puede ser peligroso ya que no intenta fusionar los cambios del alijo en su copia de trabajo, sino que lo sobrescribe con los archivos escondidos. Para que pueda perder sus cambios no comprometidos.
fuente
git add .organizará TODOS los archivos diciéndole a git que ha resuelto el conflictogit resetdesestabilizará TODOS los archivos organizados sin crear una confirmaciónfuente
git add -ucontinuacióngit resetParece que esta puede ser la respuesta que estás buscando, aún no lo he intentado personalmente, pero parece que puede ser el truco. Con este comando, GIT intentará aplicar los cambios como estaban antes, sin intentar agregarlos todos para confirmar.
git stash apply --indexAquí está la explicación completa:
http://git-scm.com/book/en/Git-Tools-Stashing
fuente
git stash pop, o ¿hay alguna forma de revertir esto y hacerlogit stash apply --indexcuando descubrí quegit stash popse encontrará con un conflicto?git stash popy termina con conflictos, el alijo no se elimina ... para que puedas ejecutargit reset --hardpara deshacer el pop y luego probar la solución que sugerí.git stash branchwill works, que crea una nueva rama para usted, comprueba el commit en el que estaba cuando escondió su trabajo, vuelve a aplicar su trabajo allí y luego deja caer el alijo si se aplica con éxito. mira estofuente
La forma más rápida que he encontrado es resolver el conflicto, luego hacer
git add -u, y luego hacergit reset HEAD, que ni siquiera implica un compromiso.fuente
Según las preguntas de git stash , después de arreglar el conflicto,
git add <file>es el curso de acción correcto.Fue después de leer este comentario que entendí que los cambios se agregan automáticamente al índice (por diseño). Es por eso que
git add <file>completa el proceso de resolución de conflictos.fuente
No es la mejor manera de hacerlo, pero funciona:
fuente
file/path/to/your/file, que no es lo que el OP preguntó, AFAIU