ver trabajar tipos tag modificados etiquetas crear con comando archivos git git-stash

git - trabajar - ¿Cómo esconder un archivo sin seguimiento?



tipos de etiquetas en git (11)

A partir de git 1.7.7, git stash acepta la opción --include-untracked (o short-hand -u ). Para incluir archivos sin seguimiento en su alijo, use uno de los siguientes comandos:

git stash --include-untracked git stash -u

Advertencia, esto eliminará permanentemente sus archivos si tiene alguna entrada de directorio / * en su archivo gitignore.

Tengo cambios en un archivo, más un archivo nuevo, y me gustaría usar git stash para guardarlos mientras cambio a otra tarea. Pero el git stash solo esconde los cambios en el archivo existente; el nuevo archivo permanece en mi árbol de trabajo, saturando mi trabajo futuro. ¿Cómo escondo este archivo sin seguimiento?


Agregue el archivo al índice:

git add path/to/untracked-file git stash

Todo el contenido del índice, más cualquier cambio no organizado en los archivos existentes, lo hará todo en el alijo.


Como se ha dicho en otra parte, la respuesta es git add el archivo. p.ej:

git add path/to/untracked-file git stash

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 decir, tienes que hacerlo. Y lo siguiente NO funcionará:

git add -N path/to/untracked/file # note: -N is short for --intent-to-add git stash

esto fallará, como sigue:

path/to/untracked-file: not added yet fatal: git-write-tree: error building trees Cannot save the current index state

¿Entonces que puedes hacer? Bueno, realmente tienes que agregar el archivo, sin embargo , puedes git rm --cached efectiva más tarde, con git rm --cached :

git add path/to/untracked-file git stash save "don''t forget to un-add path/to/untracked-file" # stash w/reminder # do some other work git stash list # shows: # stash@{0}: On master: don''t forget to un-add path/to/untracked-file git stash pop # or apply instead of pop, to keep the stash available git rm --cached path/to/untracked-file

Y luego puede continuar trabajando, en el mismo estado en el que estaba antes del git add (es decir, con un archivo sin seguimiento llamado path/to/untracked-file seguimiento de archivos; más cualquier otro cambio que haya tenido que rastrear a los archivos).

Otra posibilidad para un flujo de trabajo en esto sería algo como:

git ls-files -o > files-to-untrack git add `cat files-to-untrack` # note: files-to-untrack will be listed, itself! git stash # do some work git stash pop git rm --cached `cat files-to-untrack` rm files-to-untrack

[Nota: Como se menciona en un comentario de @mancocapac, es posible que desee agregar --exclude-standard al git ls-files (por lo tanto, git ls-files -o --exclude-standard ).]

... lo que también podría ser fácil de escribir, incluso los alias lo harían (presentado en la sintaxis zsh; ajuste según sea necesario) [también, acorté el nombre del archivo para que todo encaje en la pantalla sin desplazarse en esta respuesta; no dude en sustituir un nombre de archivo alternativo de su elección]:

alias stashall=''git ls-files -o > .gftu; git add `cat .gftu`; git stash'' alias unstashall=''git stash pop; git rm --cached `cat .gftu`; rm .gftu''

Tenga en cuenta que esta última podría ser mejor como un script de shell o una función, para permitir que los parámetros se suministren a git stash , en caso de que no quiera pop pero se apply , y / o desee poder especificar un stash específico, en lugar de sólo tomando el primero. Quizás esto (en lugar del segundo alias, arriba) [espacios en blanco reducidos para ajustarse sin desplazarse; re-agregar para mayor legibilidad]:

function unstashall(){git stash "${@:-pop}";git rm --cached `cat .gftu`;rm .gftu}

Nota : En este formulario, debe proporcionar un argumento de acción así como el identificador si va a proporcionar un identificador de alijo, por ejemplo, unstashall apply stash@{1} o unstashall pop stash@{1}

Lo que, por supuesto, pondrías en tu .zshrc o equivalente para que existiera a largo plazo.

Esperemos que esta respuesta sea útil para alguien, ya que reúne todo en una sola respuesta.


En git bash, el ocultamiento de archivos sin seguimiento se logra usando el comando

git stash --include-untracked

o

git stash -u

http://git-scm.com/docs/git-stash

git stash elimina cualquier archivo no rastreado o no comprometido de su área de trabajo. Y puedes revertir el git stash usando los siguientes comandos

git stash pop

Esto colocará el archivo nuevamente en su área 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 al repositorio remoto. No se me permite mover este .gitIgnore modificado en el repositorio remoto a partir de ahora.

Los archivos .classpath y .project son importantes para eclipse, que es mi editor Java.

En primer lugar, agregué selectivamente el resto de los archivos y me comprometí para la puesta en escena. Sin embargo, la inserción final no se puede realizar a menos que los archivos .gitIgnore modificados y los archivos sin seguimiento viz. .project y .classpath no están ocultos.

solía

git stash

para esconder el archivo .gitIgnore modificado.

Para guardar el archivo .classpath y .project, utilicé

git stash --include-untracked

y eliminó los archivos de mi espacio de trabajo. La ausencia de estos archivos me quita la capacidad de trabajar en mi lugar de trabajo en eclipse. Continué con completar el procedimiento para enviar los archivos confirmados al remoto. Una vez hecho esto con éxito, utilicé

git stash pop

Esto volvió a pegar los mismos archivos en mi espacio de trabajo. Esto me devolvió mi capacidad de trabajar en el mismo proyecto en eclipse. Espero que esto elimine los conceptos erróneos.


En la versión 2.8.1 de git: los siguientes trabajos para mí.

Para guardar archivos modificados y sin rastrear en el alijo sin un nombre

git stash save -u

Para guardar archivos modificados y sin rastrear en un alijo con un nombre

git stash save -u <name_of_stash>

Puede utilizar cualquiera de pop y aplicar más adelante de la siguiente manera.

git stash pop git stash apply stash@{0}


Hay varias respuestas correctas aquí, pero quería señalar que para los directorios completos nuevos, ''git add path'' NO funcionará. Entonces, si tienes un montón de archivos nuevos en ruta sin seguimiento y haces esto:

git add untracked-path git stash "temp stash"

Esto se esconderá con el siguiente mensaje:

Saved working directory and index state On master: temp stash warning: unable to rmdir untracked-path: Directory not empty

y si el camino sin seguimiento es el único camino que está ocultando, el "almacenamiento de temperatura" del alijo será un alijo vacío. La forma correcta es agregar la ruta completa, no solo el nombre del directorio (es decir, terminar la ruta con una ''/''):

git add untracked-path/ git stash "temp stash"


Pensé que esto podría resolverse diciéndole a git que el archivo existe, en lugar de comprometer todo su contenido al área de preparación, y luego llamar a git stash . Araqnid describes cómo hacer lo primero.

git add --intent-to-add path/to/untracked-file

o

git update-index --add --cacheinfo 100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 path/to/untracked-file

Sin embargo, este último no funciona:

$ git stash b.rb: not added yet fatal: git-write-tree: error building trees Cannot save the current index state


Pude guardar solo los archivos sin seguimiento haciendo:

git stash save "tracked files I''m working on" git stash save -u "untracked files I''m trying to stash" git stash pop stash@{1}

El último muestra el alijo de los archivos rastreados, dejando solo los archivos sin seguimiento al azar.


Simplemente puedes hacerlo con el siguiente comando

git stash save --include-untracked

o

git stash save -u

Para más información sobre el git stash visite este post (haga clic aquí)


Solía ​​reflexionar y desear la misma característica. Pero con el tiempo, me di cuenta de que realmente no es necesario. Cuando se guarda, está bien dejar los nuevos archivos. No les puede pasar nada "malo" (cuando compruebas algo más, git producirá un error y no sobrescribirá el archivo sin seguimiento existente)

Y dado que normalmente el intervalo de tiempo entre el git stash y el git stash pop es bastante pequeño, necesitarás el archivo sin seguimiento rápidamente de nuevo. Por lo tanto, diría que el inconveniente de que el archivo aparezca en git status mientras está trabajando en otra cosa (entre el git stash y el git stash pop ) es más pequeño que el inconveniente causado por el trabajo y la atención necesaria que de otro modo costaría intente agregar el archivo sin seguimiento a su alijo.


Actualización 17 de mayo de 2018:

Las nuevas versiones de git ahora tienen git stash --all que esconde todos los archivos, incluidos los archivos sin seguimiento e ignorados.
git stash --include-untracked ya no toca archivos ignorados (probado en git 2.16.2).

Respuesta original a continuación:

Advertencia, 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 o git stash save -u para esconder archivos sin seguimiento sin organizarlos.

Agregue ( git add ) el archivo y comience a rastrearlo. Luego esconderlo. Dado que todo el contenido del archivo es nuevo, se ocultarán y podrá manipularlo según sea necesario.