Eliminar un archivo existente de un repositorio de Git

Respuestas:

143

Solo para dar la respuesta completa de una vez:

  1. de Klemens: debe agregar el archivo a su .gitignorearchivo en algún lugar sobre el archivo no deseado en el repositorio. es decir

    $ cd $ cat >> .gitignore development.log Cd

  2. de m. narebski: Luego debe eliminar el archivo del repositorio ejecutando " git rm --cached <file>y luego confirmando esta eliminación"

Si también esperaba que el repositorio pareciera que nunca había rastreado ese archivo, eso es mucho más complicado y altamente desalentado, ya que no solo crea nuevas confirmaciones para cada confirmación en su historia, destruyendo así la interoperabilidad de una manera desagradable entre otras personas que han clonado su repositorio, pero también deja cada una de esas confirmaciones sin probar (suponiendo que pruebe sus confirmaciones antes de realizarlas).

Con esa advertencia en mente, la herramienta que está buscando si ese es su objetivo filter-branch. El primer ejemplo hace exactamente lo que estoy describiendo.

Tim Visher
fuente
3
el uso de git rm --cached parece no solo haberlo eliminado de mi rama, sino que, cuando llego a otro sistema, elimina físicamente los archivos en ese sistema. ¿Alguna idea de lo que está pasando allí?
biagidp
2
En respuesta a lo anterior: creo que el problema radicaba en que no tenía .gitignore en el sistema alternativo antes de realizar los cambios, por lo que la eliminación eliminó la copia local. Al menos esa es la teoría
biagidp
53

Para dejar de rastrear el archivo, simplemente use git rm --cached <filename>.

Pero como lo señalaron los demás aquí, agregar el archivo a .gitignore podría evitar que lo agregue accidentalmente nuevamente más tarde.

kusma
fuente
1

agregue el archivo gitignore.

ver http://git-scm.com/docs/gitignore

fetzig
fuente
13
Esta es solo la mitad de la respuesta. .gitignorelas entradas no se aplican a los archivos que ya están siendo rastreados.
CB Bailey
10
La segunda parte es git rm --cached <file>y luego iniciar esta eliminación.
Jakub Narębski
1
¿Por qué no hay un comando simple para que git reevalúe todos los archivos rastreados actualmente de acuerdo con el archivo .gitignore actual? ... ¿o es eso ejercer demasiado sentido común? : p
Alexander - Restablecer Mónica