Desinstalar archivos de git temporalmente

449

He configurado un git local en mi máquina. Cuando inicialicé git, agregué bibliotecas y binarios precompilados. Sin embargo, ahora durante mi desarrollo no quiero registrar esos archivos de forma intermitente. No quiero eliminar estos archivos del repositorio. ¿Hay alguna manera de no hacer un seguimiento de estos archivos hasta que complete mi desarrollo? (Creo que no puedo usar .gitignore ya que funciona solo para aquellos archivos que no están en git. Quiero deshabilitar temporalmente el seguimiento de archivos).

agent.smith
fuente

Respuestas:

722

git update-index debería hacer lo que quieras

Esto le dirá a git que desea comenzar a ignorar los cambios en el archivo
git update-index --assume-unchanged path/to/file

Cuando quieras comenzar a seguir de nuevo
git update-index --no-assume-unchanged path/to/file

Documentación de Github: índice de actualización

Andy
fuente
3
Finalmente un comando que realmente funciona para mi archivo dev devuelto accidentalmente, gracias :)
Richard de Wit
15
¿Por qué no git rm -r --cached <file>?
Ehsan
23
@Ehsan parece git rm --cachedque llevará a la eliminación de las copias locales en otras máquinas, donde se extrae la misma rama, en su siguiente extracción. Ver arlocarreon.com/blog/git/… y especialmente la discusión debajo de él.
mit
3
No funciona para mí, cuando realizo cambios en el archivo todavía se agrega a los cambios incluidos. Podría excluir, pero luego, en algún momento, probablemente se agregará accidentalmente.
MrFox
8
asumir-sin cambios no fue diseñado para este propósito. Podría querer leer este hilo
Appy
264

podría mantener sus archivos sin seguimiento después de

git rm -r --cached <file>

agrega tus archivos con

git add -u

ellos empujan o hacen lo que quieras.

cajuuh
fuente
19
Esa es realmente la respuesta correcta de acuerdo con: git-scm.com/book/en/v2/…
Ehsan
git rm --cached .DS_Store luego se imprime rm '../.DS_Store'Y el archivo local se elimina? ( git version 2.6.4 (Apple Git-63))
Weishi Zeng
Tengo la respuesta aquí stackoverflow.com/questions/6919121/…
Weishi Zeng
44
Esta no es la respuesta correcta porque eliminará el archivo en origen. El OP quiere ignorar los cambios locales de ese archivo, no eliminar el seguimiento por completo
cjsimon
2
ADVERTENCIA: también eliminará los archivos que desea rastrear. La solución es copiar todos los archivos en algún lugar y volver a copiarlos después de la confirmación.
psad
111
git rm --cached

Sin embargo, en primer lugar, no debería comprometer binarios compilados y dependencias externas. Use una herramienta como Bundler para atraerlos.

Tekkub
fuente
2
No olvide la opción -r (recursiva) para directorios: git rm -r --cached
Anatoliy Shuba
36

Use el siguiente comando para destrabar archivos

git rm --cached <file path>
Dinesh Vaitage
fuente
7

El git-book menciona esto en la sección 2.4: "Deshacer cosas". Básicamente, lo que tiene que hacer es restablecer el estado del índice de algunos archivos al estado HEAD, es decir, al estado de la última comprobación (o confirmación). Esto deshace la organización del archivo en el índice actual. El comando para esta tarea es git reset. [1]

Entonces, el comando que debe ejecutar es:

git reset HEAD /path/to/file

Las versiones más recientes de git (creo que desde 1.6 más o menos) le dan a este comando (y muchos más) una sugerencia cuando se ejecuta git status. Estas versiones son muy fáciles de usar. Un consejo personal: si solo está montando unos pocos archivos, úselo git add -i. Esto lanzará la herramienta de puesta en escena interactiva, que hace las cosas particularmente fáciles. Además, recomiendo leer el libro, ya que es muy explícito sobre el uso de git en situaciones prácticas.

[1] http://www.git-scm.com/book

Eric Spreen
fuente
Estoy de acuerdo en que git reset [file]es la forma más sencilla de eliminar archivos del escenario.
Espectral
18
deshacer y deshacer son cosas diferentes
Jaime Sangcap
6

No es una respuesta a la pregunta original. Pero esto podría ayudar a alguien.

Para ver los cambios que ha realizado ( sepa qué archivos están marcados como --asumir-sin cambios )

git ls-files -v

La lista de archivos resultante tendrá un prefijo con un carácter (por ejemplo: H o h) Si es una letra minúscula (es decir, h), entonces el archivo se marcó --asumir- sin cambios

principal
fuente
5

Supongo que está preguntando cómo eliminar TODOS los archivos en la carpeta de compilación o la carpeta bin, en lugar de seleccionar cada archivo por separado.

Puede usar este comando:

git rm -r -f /build\*

asegúrese de estar en el directorio principal del directorio de compilación.
Este comando "borrará" recursivamente todos los archivos que están en las carpetas bin / o build /. Con la palabra eliminar me refiero a que git fingirá que esos archivos están "eliminados" y que esos archivos no serán rastreados. El git realmente marca esos archivos para estar en modo de eliminación.

Asegúrate de tener tu .gitignore listo para los próximos commits.
Documentación: git rm

Vraj Pandya
fuente
1

git reset [archivo]

Recuperar el archivo del área de preparación al directorio de trabajo

A menudo olvido agregar mis módulos de nodo al archivo .gitignore, esto resuelve ese problema.

Lordharbar
fuente
1

Esto funciono para mi

git reset HEAD 'nombre de archivo'

Vivek
fuente
1

Para eliminar todos los archivos Untrack. Prueba este comando de terminal

 git clean -fdx
divya d
fuente
Eliminará archivos del disco y no del historial de git.
Leonardo
-1

para eliminar archivos y carpetas sin seguimiento, configure git clean -fdx

Khadraoui Khairi
fuente