Sobrescribir el historial del repositorio de Git, por ejemplo, para editar confirmaciones antiguas, eliminar datos innecesarios (como datos personales o archivos grandes), cambiar la estructura de archivos, corregir metadatos, etc.

Hay muchas razones para reescribir la historia de Git:

  • Arreglando la vieja fijación.
  • Reducir el tamaño del repositorio mediante la eliminación de archivos grandes previamente guardados en los repositorios, todavía ocupan espacio en el disco, incluso si se eliminan de las confirmaciones posteriores
  • Elimine los datos confidenciales (contraseñas, credenciales, etc.) que no desearía utilizar al intercambiar repo, o incluso simplemente cambiar de repositorio a un proveedor de alojamiento externo.
  • Reinstale o elimine carpetas enteras para reflejar la separación de muchos subproyectos de un repositorio a muchos o viceversa.
Almacenamiento

Git guarda el historial completo del proyecto, y el diseño de los compromisos de Git es inmutable (su identificador cambia completamente si al menos una pequeña parte de su contenido o historial cambia). ¿Cómo puede eliminar los datos innecesarios almacenados en las profundidades de sus repositorios?

Herramientas para reescribir la historia.

Cambiar el historial en el repositorio de Git significa volver a escribir todo el historial de confirmación posterior desde este punto. Varias herramientas están disponibles para permitirte hacer esto:

  • git commit --amend - para cometer el último commit que cometas.
  • git rebase para git rebase a instalar el historial de la rama, reproduciéndolo como si todo estuviera basado en otro punto (a menudo más nuevo) en el historial del repositorio. Utilizado con el indicador -i , puede utilizarse para reordenar el historial de forma interactiva.
  • git filter-branch es una herramienta automatizada para reescribir muchas confirmaciones (en muchas sucursales) utilizando uno o más scripts de shell para realizar cambios, lo que le da una mayor flexibilidad.
  • BFG Repo-Cleaner es una alternativa a git-filter-branch , que proporciona mayor velocidad y facilidad de uso, y se limita a casos comunes mediante la tarea de eliminar datos no deseados.

Intercambio de historia reescrita

Si el repositorio se dividió antes de sobrescribir, debe mover la versión sobrescrita al servidor principal utilizando el --mirror --force o --mirror , y luego pedir a otros usuarios que vuelvan a clonar el repositorio.