No puedo volver a aplicar el alijo al directorio de trabajo.
Pequeña historia:
Primero intenté impulsar algunos cambios comprometidos, pero decía: "no, no puedes, tira primero" ... OK, entonces, sacaré cosas de GitHub y luego presionaré mis cambios. Cuando traté de tirar, decía que tenía cambios que se sobrescribirían y que debería guardar mis cambios. OK, guardé los cambios ... hice el tirón y empujé los cambios comprometidos. Pero ahora, no puedo restaurar los cambios no confirmados en los que estaba trabajando.
Este es el error:
MyPath/File.cs already exists, no checkout
Could not restore untracked files from stash
Seguro que todavía no entiendo todos los conceptos de git, me confunden un poco ... quizás hice algo mal.
Sería genial si alguien pudiera ayudarme a resolver esto ... He estado buscando en Google y todo durante más de una hora y aún no he encontrado una solución.
Se agradece mucho la ayuda. ¡Gracias!
git stash
debería ayudar a respaldar rápidamente los cambios locales. Eliminar manualmente un conjunto de archivos para restaurarlo interrumpe el flujo. Elgit stash branch
enfoque en la otra respuesta suena mejor, pero aún mucho más manual de lo deseado.La forma más segura y fácil probablemente sería guardar cosas nuevamente:
Luego, si está satisfecho con el resultado, puede llamar
para eliminar su escondite "seguro".
fuente
apply
lugar depop
.pop
es una combinación deapply
ydrop
, pero solo lo harádrop
si seapply
trabaja sin conflictos. Pero eso sí,apply
suele ser más seguro.Como lo menciona @bentolo, puede eliminar manualmente los archivos de los que se queja, cambiar de rama y luego volver a agregarlos manualmente. Pero personalmente prefiero quedarme "dentro de git".
La mejor forma de hacerlo es convertir el alijo en una rama. Una vez que es una rama, puede trabajar normalmente en git usando las técnicas / herramientas normales relacionadas con las ramas que conoce y ama. En realidad, esta es una técnica general útil para trabajar con escondites incluso cuando no tiene el error enumerado. Funciona bien porque un alijo realmente es un compromiso bajo las sábanas (ver PD).
Convertir un alijo en una rama
Lo siguiente crea una rama basada en HEAD cuando se creó el alijo y luego aplica el alijo (no lo confirma).
Trabajar con la "rama de alijo"
Lo que haga a continuación depende de la relación entre el alijo y dónde se encuentra ahora su rama de destino (que llamaré ORIGINALBRANCH).
Opción 1 - Rebasear la rama de alijo normalmente (muchos cambios desde el alijo)
Si ha realizado muchos cambios en su SUCURSAL ORIGINAL, probablemente sea mejor tratar STASHBRANCH como cualquier sucursal local. Confirme sus cambios en STASHBRANCH, vuelva a basarlo en ORIGINALBRANCH, luego cambie a ORIGINALBRANCH y vuelva a colocar / fusionar los cambios de STASHBRANCH sobre él. Si hay conflictos, trátelos normalmente (una de las ventajas de este enfoque es que puede ver y resolver los conflictos).
Opción 2: restablecer la rama original para que coincida con el alijo (cambios limitados desde el alijo)
Si simplemente guardó algunos cambios por etapas, luego se comprometió, y todo lo que quiere hacer es obtener los cambios adicionales que no estaban almacenados cuando los guardó, puede hacer lo siguiente. Volverá a su rama e índice originales sin cambiar su copia de trabajo. El resultado final serán sus cambios adicionales de alijo en su copia de trabajo.
Antecedentes
Las reservas son confirmaciones como ramas / etiquetas (no parches)
PD: Es tentador pensar en un alijo como un parche (al igual que es tentador pensar en un compromiso como un parche), pero un alijo es en realidad un compromiso contra el HEAD cuando se creó. Cuando aplica / pop, está haciendo algo similar a seleccionarlo en su rama actual. Tenga en cuenta que las ramas y etiquetas son en realidad solo referencias a confirmaciones, por lo que, en muchos sentidos, los alijos, ramas y etiquetas son solo formas diferentes de señalar una confirmación (y su historial).
A veces es necesario incluso cuando no ha realizado cambios en el directorio de trabajo
PPS, es posible que necesite esta técnica después de usar alijo con --patch y / o --include-untracked. Incluso sin cambiar los directorios de trabajo, esas opciones a veces pueden crear un alijo que no se puede volver a aplicar. Debo admitir que no entiendo completamente por qué. Consulte http://git.661346.n2.nabble.com/stash-refuses-to-pop-td7453780.html para una discusión.
fuente
git stash show -p
está ayudando allí para hacer alijo -> * parche *.La solución: debe eliminar el archivo en cuestión, luego intentar guardar el pop / aplicar nuevamente y debería pasar. No elimine otros archivos, solo los mencionados por el error.
El problema: Git apesta a veces. Cuando se ejecuta
git stash -u
, incluye archivos sin seguimiento (¡genial!) Pero no elimina esos archivos sin seguimiento y no sabe cómo aplicar los archivos sin seguimiento escondidos encima de los sobrantes (¡no genial!), Lo que realmente hace que la-u
opción sea bastante inútil.fuente
git stash -u
git stash show
. Esta respuesta hizo que se encendiera la bombilla.Para aplicar las diferencias de código en el alijo como un parche, use el siguiente comando:
fuente
git stash show --patch
no contiene los archivos sin seguimiento.Esto me ha sucedido en numerosas ocasiones, guardo archivos sin
git stash -u
seguimiento con los que se terminan agregando al repositorio y ya no puedo aplicar los cambios guardados.No pude encontrar una manera de forzar el
git stash pop/apply
reemplazo de los archivos, así que primero elimino las copias locales de los archivos sin seguimiento que estaban escondidos ( tenga cuidado, ya que eliminará los cambios que no se han confirmado ) y luego aplico los cambios escondidos :Finalmente, utilizo
git status
,git diff
y otras herramientas, para verificar y agregar partes de los archivos eliminados si falta algo.Si tiene cambios no confirmados que desea conservar, primero puede crear una confirmación temporal:
Use las herramientas que más le convengan para fusionar los cambios previamente confirmados en los archivos locales y elimine la confirmación ficticia:
fuente
Mi operación pop bloqueada de manera similar se debió a que los archivos restantes ignorados (consulte el archivo .gitignore). El estado de Git me mostró rastreado y no rastreado, pero mis actividades no limpiaron los archivos ignorados.
Detalles: había usado
git stash save -a
, comprobado el maestro para compilar y ver el comportamiento original, luego intenté volver a colocarlo todo para continuar editando. Cuando revisé mi rama e intenté hacer estallar, mis archivos ignorados todavía estaban allí desde antes de guardar el alijo. Esto se debe a que la extracción del maestro solo afectó los archivos comprometidos, no borró los archivos ignorados. Entonces, el mensaje emergente falló, esencialmente diciendo que no quería restaurar mis archivos ignorados escondidos encima de los archivos que todavía estaban allí. Es lamentable que no haya podido encontrar la manera de iniciar una sesión de fusión con ellos.En última instancia, solía
git clean -f -d -x
eliminar los archivos ignorados. Curiosamente, de mis ~ 30, todavía quedan 4 archivos después de la limpieza (enterrados en subdirectorios). Tendré que averiguar en qué categoría están, que tenían que eliminarse manualmente.Entonces mi pop tuvo éxito.
fuente
Prueba esto:
alijo de pago de git -.
fuente
Otra solucion:
fuente
Con Git 2.14.x / 2.15 (Q3 2017), la solución de qwertzguy de 2014 ya no será necesaria.
Antes del tercer trimestre de 2017, tenía que eliminar el archivo en cuestión y luego intentar guardar el pop / aplicar nuevamente.
Con la próxima versión de Git, no tendrá que hacer eso.
Ver commit bbffd87 (11 de agosto de 2017) de Nicolas Morey-Chaisemartin (
nmorey
) .(Combinado por Junio C Hamano -
gitster
- en el compromiso 0ca2f32 , 23 de agosto de 2017)fuente
La forma más segura de seguir escondiendo
git stash -u
Esto guardará todo, incluido el cambio sin etapas.
Git Stash Drop
una vez que haya terminado de trabajar en él, para eliminar su alijo "seguro".
fuente