2011-11-01 9 views
5

Desafortunadamente, hace un tiempo comprobamos accidentalmente un archivo binario grande y hasta el día de hoy nadie lo había notado. Ahora quiero soltar esa confirmación y tener el resto de la historia tal como está. Sé acerca de las advertencias sobre el cambio de historial, pero en este caso no puedo evitarlo.Soltar compromiso antiguo: `git rebase` provoca conflictos de combinación

He estado tratando de lograr eso por ~ 1h pero no lo logro. El mejor comando que encontré es

git rebase --interactive --preserve-merges $(EVIL_COMMIT)^ 

y en el editor comentando el 1er compromiso que es el malo.

Desafortunadamente git rebase se detiene en las fusiones y solicita la resolución manual de los conflictos de combinación. La confirmación maligna solo agrega algunos archivos de ejemplo que nuestro software calculará con fines de prueba. Por lo tanto, no debería haber ningún conflicto con los archivos de ejemplo que faltan.

  1. No entiendo de dónde provienen los conflictos de combinación. Alguien puede explicar?
  2. ¿Cómo resolver eso?

He pasado bastante tiempo en Google y SO search. Algunos hilos cubren un tema similar pero ya sea syntax used is not available en la versión actual de Git o no funcionó para mí (solo describí un método anterior porque es el enfoque más fácil).

+0

posible duplicado de [Cómo eliminar/borrar un archivo grande de cometer historia en el repositorio de Git?] (http://stackoverflow.com/questions/2100907/how-to-remove-delete-alarge-file-from-commit-history-in-git-repository) –

Respuesta

6

me gustaría ir con filter-branch:

git filter-branch --prune-empty --index-filter ' 
    git rm --cached --ignore-unmatch path/to/file 
' --all 
+0

Esto solo elimina el archivo 'ruta/a/archivo' de todas las revisiones, ¿verdad? Por lo que yo entiendo, no elimina el compromiso que se dejará vacío después de eliminar los binarios (en realidad hay 4 de ellos). –

+2

agrega '--prune-empty' al comando de rama de filtro. –

+1

Creo que te refieres a 'HEAD' en lugar de a' $ (EVIL_COMMIT)^'en esta respuesta; de lo contrario, solo filtraría los commits hasta el anterior al que introdujo el archivo grande. –