2009-02-22 26 views
13

Parece que mi compromiso inicial está ocupando el 90% del espacio, ya que se hizo accidentalmente con un montón de archivos multimedia en él. ¿Hay alguna manera de eliminar solo el primer compromiso de repos locales y remotos, o debería dejar este?¿Puedo eliminar la confirmación inicial de un repositorio de Git?

+1

También hay 'git rebase--root'. Consulte la siguiente respuesta de SO para obtener más detalles: http://stackoverflow.com/questions/2246208/change-first-commit-of-project-with-git – MKroehnert

Respuesta

20

Parece que ya ha compartido el repositorio con otros usuarios. Si este es el caso, entonces probablemente solo deberías vivir con eso.

Si tiene el control de todos los clones, puede volver a escribir el historial sobre una confirmación raíz modificada con los archivos no deseados eliminados. Tenga en cuenta que no debe hacer esto si otros desarrolladores ya han funcionado desde esta rama.

Si le interesa la reescritura del historial, puede intentar lo siguiente. Tenga en cuenta que debido a que git mantiene registros de donde ha estado recientemente su commit de HEAD (reflogs), los objetos grandes no desaparecerán inmediatamente de su repositorio u otros repositorios que ya los tengan, aunque intente con git gc o git gc --prune. Sin embargo, garantizará que los clones nuevos no terminen recuperando los objetos grandes como parte del historial de la rama maestra.

Suponiendo que el directorio de trabajo es 'limpia':

# Go back the initial commit 
git checkout <SHA1_of_old_root> 

# Clean up the index to remove unwanted files, e.g. using git rm <files> 
# ... 

# Amend the initial commit with the new tree. Note the sha1 of the new commit 
git commit --amend 

# Go back to the master branch 
git checkout master 

# Re-apply all the commits onto the new root 
git rebase --onto <SHA1_of_new_root> <SHA1_of_old_root> 
2

alternativa, se puede utilizar para eliminar git filter-branch ofender archivos (véase la sección Ejemplos), pero también está reescribiendo la historia. Por lo tanto, cualquiera que haya basado su código en la parte superior de su historia anterior tendría mala sorpresa ...

+1

filter-branch también se adaptará mejor (o al menos requerirá menos interacción) si los cambios en los archivos no deseados se han rastreado desde la confirmación de la raíz. –

Cuestiones relacionadas