2010-08-11 15 views
57

Hace poco noté que los archivos del proyecto que utilizan mis editores de texto (junto con otra basura) se agregaron al repositorio de git para el proyecto. Como en realidad no son parte del proyecto, me gustaría eliminarlos, pero git rm no elimina las versiones anteriores del repositorio, y no pude encontrar nada más que parezca prometedor.¿Cómo puedo eliminar por completo un archivo de un repositorio de git?

+3

duplicado parcial, sin duda cubierto por las preguntas anteriores: http://stackoverflow.com/questions/307828/git-remove-file-accidentally-added-to -the-repository http://stackoverflow.com/questions/1216733/remove-a-directory-permanently-from-git – Cascabel

Respuesta

110

La herramienta que desea es git filter-branch. Su uso se describe here, pero básicamente:

$ git filter-branch --tree-filter 'rm -f my_file' HEAD 

quitará "mi_archivo" de cada commit.

Tenga en cuenta que esto reescribe cada confirmación, por lo que si ingresa a un repositorio remoto, tiene que (a) forzar la actualización, y (b) todos los que lo extrajeron tendrán confirmaciones duplicadas (ya que reescribió el historia), como se describe en el git rebase man page.

+15

Recomiendo agregar '--prune-empty' para que las confirmaciones vacías generadas como resultado se eliminen también. – fnkr

+0

¿Cómo funciona esto en un repositorio con muchos archivos con el mismo nombre en directorios diferentes? ¿Elimina todos los archivos con el mismo nombre? – CodeMonkey

+1

@CodeMonkey: en ese caso, usaría una ruta más larga y única. – mipadi

5

Esto es lo que git filter-branch es para, pero tenga en cuenta que su historial de repos cambiará, y los valores hash de confirmación serán diferentes después de la reescritura del historial.

Si también desea liberar el espacio, le recomiendo que use git forget-blob, porque git filter-branch por sí solo no hará que git olvide su archivo, ya que todavía puede ser referenciado por controles remotos, reflog, etiquetas y demás.

git forget-blob main.c.swp

Puede obtener más información here

Cuestiones relacionadas