2011-12-22 15 views
22

Así que estoy migrando de svn (code.google.com) a git (github).Cómo volver a establecer la base de todos los commits desde el principio

He importado mi proyecto del repositorio svn, e importó todo el historial de confirmaciones. No estoy realmente orgulloso de esos comentarios, ya que fue uno de mis primeros proyectos, no muy serio.

Me gustaría volver a clasificar todo en una sola confirmación de 'importación inicial'.

He sacado todo en mi computadora y estoy tratando de hacer eso. Pero todo lo que encontré fue: git rebase -i master pero solo reestablece nuevas modificaciones y confirmaciones.

¿Cómo puedo limpiar mi repositorio github de todo el historial con una rebase?

Respuesta

16

Podrías volver a clasificar y aplastar todo si quisieras (excepto la confirmación inicial) pero ¿para qué molestarse? Simplemente elimine su directorio .git, ejecute git init para recrearlo, git add todo, y git commit para hacer una nueva confirmación inicial.

+0

En realidad, la tuya es una mejor respuesta solo por agrupar una única confirmación. Dejaré el mío solo para mostrar que puedes especificar un compromiso para empezar a rebasar. – Abizern

+0

sí, terminé con esta solución. Gracias a todos. –

2

Si desea reducir toda su historia para un solo "Importación inicial" de registro, simplemente retire .git directorio y crear un nuevo repositorio local (mantener una copia de seguridad de la anterior). git init . && git add . && git commit -m "Initial import".

Este nuevo repositorio no tendrá un antecesor común con el que ha enviado a GitHub, por lo que tendrá que git push --force su nuevo repositorio creado.

5

Encuentra el hash de la confirmación que deseas comenzar a comprimir, digamos abcd12 y luego rebase específicamente contra ese hash.

git rebase -i abcd12 

está usando el master a rebasar en contra, que realiza el rebase contra la punta de la rama principal.

+0

funcionó para el historial, pero el mensaje al lado de cada archivo aún muestra el mensaje de confirmación de antes. –

+0

¿De hecho aplastó los archivos? le da una opción para crear un nuevo mensaje de compromiso. – Abizern

+0

Sí, aplasté todo menos el primer compromiso. Eliminé todos los mensajes de confirmación. Lo estaba viendo bien en el historial de Github, pero no en archivos individuales. Tal vez fue un problema de caché de Github. De todos modos, gracias, terminé inicializando un nuevo repositorio. –

9

respuesta de Jefromi funcionará, pero si usted quiere mantener su configuración de repo existente, o incluso salir alrededor de las confirmaciones por si acaso, se puede hacer lo siguiente:

git checkout master

git branch backup dejar opcionalmente otra rama aquí en caso de que quieras conservar tu historial.

git reset --soft $SHA_OF_INIT_COMMIT esto actualizará a lo que HEAD está apuntando, pero deje su índice y directorio de trabajo en su estado actual. Puede obtener el SHA con git log --pretty=format:%h --reverse | head -n 1, y realice este paso con git reset --soft $(git log --pretty=format:%h --reverse | head -n 1)

git commit --amend cambie su compromiso inicial para que apunte al estado actual de su repositorio.

35

git rebase -i --root comenzará una base de datos interactiva de todas las confirmaciones desde el principio.

Desde allí, puede aplastar todas las confirmaciones en una y/o realizar otras ediciones.

Cuestiones relacionadas