Tengo cambios en un archivo, más un nuevo archivo, y me gustaría usar git stash para guardarlos mientras cambio a otra tarea. Pero git stash por sí solo oculta solo los cambios en el archivo existente; el nuevo archivo permanece en mi árbol de trabajo, abarrotando mi trabajo futuro. ¿Cómo guardo este archivo no rastreado?
1437
git stash show
no devuelve nada y puede sentirse tentado a soltarlo (como acabo de hacer mientras contenía un script útil que escribí hace unos meses) → cómo recuperar un alijo caído )Respuestas:
Para esconder su directorio de trabajo, incluidos los archivos no rastreados (especialmente aquellos que están en .gitignore), entonces probablemente quiera usar este cmd:
git stash --include-untracked
Más detalles:
Actualización 17 de mayo de 2018:
Ahora hay nuevas versiones de git
git stash --all
que ocultan todos los archivos, incluidos los archivos no rastreados e ignorados.git stash --include-untracked
ya no toca los archivos ignorados (probado en git 2.16.2).Respuesta original a continuación:
Advertencia, hacer esto eliminará permanentemente sus archivos si tiene alguna entrada de directorio / * en su archivo gitignore.
A partir de la versión 1.7.7, puede usar
git stash --include-untracked
ogit stash save -u
guardar archivos sin seguimiento sin organizarlos.Agregue (
git add
) el archivo y comience a rastrearlo. Entonces esconder. Como todo el contenido del archivo es nuevo, se guardará y podrá manipularlo según sea necesario.fuente
git stash --include-untracked
antesgit stash --all
en su respuesta por dos razones. En primer lugar, responde a la pregunta del PO mejor ahora en 2019 y segundo porque --all hace algo que la mayoría de los usuarios probablemente no quiero, ya que elimina todos los archivos que se .gitignoredA partir de git 1.7.7,
git stash
acepta la--include-untracked
opción (o abreviatura-u
). Para incluir archivos no rastreados en su escondite, use cualquiera de los siguientes comandos:Advertencia, hacer esto eliminará permanentemente sus archivos si tiene alguna entrada de directorio / * en su archivo gitignore.
fuente
.gitignore
ve asíignoredDirectory
y noignoredDirectory/*
, todavía elimina los que no se rastrean. Incluso archivos sin seguimiento, no solo directorios.*.extension
entradas?git
1.8.3-u
(--include-untracked
) puede esconder y reventar archivosgit stash show
no rastreados, pero no enumera los archivos no rastreados que están en el esconditeAgregue el archivo al índice:
Todo el contenido del índice, más cualquier cambio no escalonado a los archivos existentes, lo incluirá en el alijo.
fuente
git add .
no lo estaba tomando en consideración por alguna razónEn git bash, el almacenamiento de archivos no rastreados se logra mediante el comando
o
http://git-scm.com/docs/git-stash
git stash elimina cualquier archivo no rastreado o no confirmado de su espacio de trabajo. Y puede revertir git stash usando los siguientes comandos
Esto colocará el archivo nuevamente en su espacio de trabajo local.
Mi experiencia
Tuve que realizar una modificación en mi archivo gitIgnore para evitar el movimiento de los archivos .classpath y .project en el repositorio remoto. No tengo permitido mover este .gitIgnore modificado en repositorio remoto a partir de ahora.
Los archivos .classpath y .project son importantes para eclipse, que es mi editor de Java.
En primer lugar, agregué selectivamente el resto de los archivos y me comprometí para la puesta en escena. Sin embargo, el empuje final no se puede realizar a menos que los archivos .gitIgnore modificados y los archivos no rastreados sean. .project y .classpath no están escondidos.
solía
para guardar el archivo .gitIgnore modificado.
Para guardar el archivo .classpath y .project, utilicé
y eliminó los archivos de mi espacio de trabajo. La ausencia de estos archivos me quita la capacidad de trabajar en mi ubicación de trabajo en eclipse. Continué completando el procedimiento para enviar los archivos comprometidos a control remoto. Una vez que esto se hizo con éxito, usé
Esto pegó los mismos archivos en mi espacio de trabajo. Esto me devolvió mi capacidad de trabajar en el mismo proyecto en eclipse. Espero que esto deje de lado los conceptos erróneos.
fuente
~/.gitignore
.Como se ha dicho en otra parte, la respuesta es al
git add
archivo. p.ej:Sin embargo, la pregunta también se plantea en otra respuesta: ¿Qué sucede si realmente no desea agregar el archivo? Bueno, por lo que puedo ver, tienes que hacerlo. Y lo siguiente NO funcionará:
esto fallará, como sigue:
¿Entonces que puedes hacer? Bueno, realmente debe agregar el archivo, sin embargo , puede desagruparlo efectivamente más adelante, con
git rm --cached
:Y luego puede continuar trabajando, en el mismo estado en el que estaba antes
git add
(es decir, con un archivopath/to/untracked-file
no rastreado llamado ; más cualquier otro cambio que haya tenido que rastrear archivos).Otra posibilidad para un flujo de trabajo en esto sería algo como:
[Nota: Como se menciona en un comentario de @mancocapac, es posible que desee agregar
--exclude-standard
algit ls-files
comando (así quegit ls-files -o --exclude-standard
).]... que también se puede escribir fácilmente: incluso los alias funcionarían (presentado en sintaxis zsh; ajustar según sea necesario) [también, acorté el nombre del archivo para que todo se ajuste en la pantalla sin desplazarse en esta respuesta; no dude en sustituir un nombre de archivo alternativo de su elección]:
Tenga en cuenta que este último podría ser mejor como un script o función de shell, para permitir que los parámetros que se deben proporcionar a
git stash
, en caso de que no deseapop
sinoapply
, y / o quieren ser capaces de especificar un alijo específica, en lugar de limitarse a tomar la parte superior uno. Quizás esto (en lugar del segundo alias, arriba) [espacio en blanco despojado para ajustarse sin desplazarse; re-agregar para mayor legibilidad]:Nota : en este formulario, debe proporcionar un argumento de acción, así como el identificador si va a proporcionar un identificador oculto, por ejemplo,
unstashall apply stash@{1}
ounstashall pop stash@{1}
Lo que, por supuesto, pondría en su
.zshrc
o equivalente para hacer que exista a largo plazo.Esperemos que esta respuesta sea útil para alguien, ya que reúne todo en una sola respuesta.
fuente
En git versión 2.8.1: lo siguiente funciona para mí.
Para guardar archivos modificados y no rastreados en un alijo sin nombre
Para guardar archivos modificados y sin seguimiento en un alijo con un nombre
Puede usar pop o aplicar más tarde de la siguiente manera.
fuente
git stash show
No les mostró. Cuando lo intentégit stash apply
, recibí "error: no se pudieron restaurar los archivos no rastreados desde el escondite". Sin embargo, los archivos se enumeraron una vez más como no rastreados, pero los cambios en los archivos rastreados no se restauraron. Creo que esos archivos podrían restaurarse individualmente al sacarlos del escondite, pero esta solución no era lo que esperaba.Pude esconder solo los archivos no rastreados haciendo:
El último muestra el alijo de los archivos rastreados, dejando solo los archivos no rastreados escondidos.
fuente
git stash save -u
no solo guarda losuntracked
archivos, sino también los archivostracked
yuntracked
. Creo que el primer salvamento que estás haciendo no es necesario en este caso. Hay un buen diagrama en atlassian.com/git/tutorials/saving-changes/…Si desea guardar archivos no rastreados, pero mantener los archivos indexados (los que está a punto de confirmar, por ejemplo), simplemente agregue la
-k
opción (mantener índice) a-u
fuente
Simplemente puede hacerlo con el siguiente comando
o
Para obtener más información sobre git stash, visite esta publicación (haga clic aquí)
fuente
supongamos que el archivo nuevo y sin seguimiento se llama: "views.json". si desea cambiar de sucursal ocultando el estado de su aplicación, generalmente escribo:
Entonces:
Y sería escondido. Entonces puedo cambiar de rama con
fuente
Hay varias respuestas correctas aquí, pero quería señalar que para los nuevos directorios enteros,
'git add path'
lo hará NO trabajo. Entonces, si tiene un montón de archivos nuevos en la ruta sin seguimiento y haga esto:esto se esconderá con el siguiente mensaje:
y si sin seguimiento de la ruta es el único camino que eres esconder, el alijo "escondite temporal" será un alijo vacía. La forma correcta es agregar la ruta completa, no solo el nombre del directorio (es decir, finalizar la ruta con un '/'):
fuente
Pensé que esto podría resolverse diciéndole a git que el archivo existe, en lugar de enviar todo el contenido al área de preparación, y luego llamar
git stash
. Araqnid describe cómo hacer lo primero.o
Sin embargo, este último no funciona:
fuente
mi favorito, ya que guarda también los archivos que ha agregado y no los ha montado.
fuente
Encontré un problema similar al usar Sourcetree con archivos recién creados (tampoco se incluirían en el alijo).
Cuando elegí por primera vez 'poner todo en escena' y luego esconder los componentes recién agregados donde fueron rastreados y, por lo tanto, incluidos en el alijo.
fuente
Solía reflexionar y desear la misma característica. Pero con el tiempo, noté que realmente no es necesario. Cuando guardas, está bien dejar los nuevos archivos. Nada "malo" puede sucederles (cuando revisas algo más, git producirá un error y no sobrescribirá el archivo sin seguimiento existente)
Y dado que, por lo general, el período de tiempo entre el
git stash
y elgit stash pop
es bastante pequeño, necesitará el archivo sin seguimiento rápidamente nuevamente. Entonces, diría que el inconveniente de que el archivo aparezcagit status
mientras trabajas en otra cosa (entre elgit stash
y elgit stash pop
) es menor que el inconveniente causado por el trabajo y la atención necesaria que de lo contrario costaría tratar de agregar el archivo sin seguimiento a tu esconditefuente