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).



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


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.


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


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.


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


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


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


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


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.


1

Esto funciono para mi

git reset HEAD 'nombre de archivo'


1

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

 git clean -fdx

Eliminará archivos del disco y no del historial de git.
Leonardo

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.