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?
Respuesta
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.
Recomiendo agregar '--prune-empty' para que las confirmaciones vacías generadas como resultado se eliminen también. – fnkr
¿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
@CodeMonkey: en ese caso, usaría una ruta más larga y única. – mipadi
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
- 1. ¿Es posible vaciar por completo un repositorio remoto de Git?
- 2. git - eliminar archivo del repositorio
- 3. ¿Eliminar un conjunto de cambios específico del repositorio de Git por completo?
- 4. ¿Puedo eliminar la confirmación inicial de un repositorio de Git?
- 5. eliminar un archivo de control de GIT
- 6. ¿Cómo pasar por un repositorio de git?
- 7. ¿Cómo eliminar un repositorio local de Git de TortoiseGit?
- 8. ¿Cómo eliminar objetos no utilizados de un repositorio de git?
- 9. ¿Es posible eliminar por completo un archivo de mi repositorio SVN?
- 10. ¿Cómo puedo eliminar por completo un paquete en Perl?
- 11. git eliminar las revisiones más antiguas de un archivo
- 12. Cómo eliminar un blob de git repo
- 13. ¿Cómo puedo "censurar" el historial de un repositorio de git?
- 14. Obtiene un solo archivo de un repositorio remoto de git
- 15. ¿Cómo puedo reemplazar por completo un repositorio bitbucket con otro repositorio?
- 16. Cómo eliminar el origen del repositorio git
- 17. ¿Cómo restaurar un repositorio de git corrupto?
- 18. ¿Cómo manejar un repositorio grande de git?
- 19. ¿Cómo elimino un repositorio local en git?
- 20. ¿Cómo puedo enviar a alguien un repositorio de git?
- 21. ¿Cómo eliminar por completo un problema de GitHub?
- 22. git: ¿puedo subtree fusionar solo un subtempo de un repositorio?
- 23. Eliminar un archivo existente de un Git Repo
- 24. ¿Cómo puedo renombrar un repositorio de git con submódulos?
- 25. ¿Puedo copiar un repositorio git a Windows?
- 26. Mover un repositorio de git
- 27. ¿Cómo puedo enviar un paquete de git
- 28. ¿Cómo puedo mover un único directorio de un repositorio de git a un nuevo repositorio mientras mantengo el historial?
- 29. Git: Cómo obtener una instantánea de un repositorio git
- 30. Cómo reiniciar un repositorio git-svn
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