2011-09-18 9 views
9

es decir, que tengo:Git: cómo eliminar el historial antes de una determinada cometer

root -- c1 -- c2 -- .. - c1000 -- c1001 -- c1002 -- .. -- c2000 -- top 

y yo quiero tener:

root = c1000 -- c1001 -- c1002 -- .. -- c2000 -- top 

¿Cómo?

(supongo que puedo hacer a través de git filter-branch, pero ¿cómo exactamente?)

(Por supuesto, sé que esto significa que la historia-reescritura ...)

Respuesta

4

La manera más fácil es con un injerto de git. Si edita el archivo .git/info/injertos, se puede poner líneas en el archivo del formato

[ref] [parent1] [parent2] ...

ningún commit hace referencia en el lado izquierdo son tratados entonces como si los padres están a la derecha son los padres de ese compromiso. Para que pueda insertar una línea como

c1000

y será tratado como si no tiene padres. Esto puede ser "horneado en piedra" ejecutando git-filter-branch.

9

He encontrado el siguiente útil para crear nuevos repositorios con una raíz diferente (que es lo que creo que está pidiendo al decir eliminar la historia antes de que un commit):

git fast-export master~5..master | (cd ../newrepo.git && git init . && git fast-import && git checkout) 

(se puede hacer lo anterior en el mismo repositorio también)

+0

¡Un gran consejo! Muy útil para crear un proyecto limpio desde la rama de otro proyecto, pero sin la molestia de git filter-branch. – Claudio

+0

Esta publicación es bastante antigua, pero espero obtener una respuesta. ¿Hay alguna forma de conservar los ID de confirmación durante la importación? –

Cuestiones relacionadas