2012-06-03 21 views
5

He estado trabajando en un repositorio privado por un tiempo, y voy a lanzar a GitHub.Git - presionar al nuevo control remoto con un único compromiso consolidado

El problema es que tengo muchos compromisos, y por razones de higiene, me gustaría que solo apareciera una única confirmación en GitHub.

¿Cómo presiono sin empujar la historia? es decir, consolidar todo el MAESTRO en un único compromiso

muchas gracias de antemano.

Doug

Respuesta

1

Mire en git rebase. Modo interactivo.

5

Normalmente se usaría git rebase --interactive HEAD~n donde n es el no. de compromisos que desea fusionar en uno. Sin embargo, en su caso, usted quiere aplastar todo el historial en una única confirmación y, dado que no es posible volver a establecer la base sin un padre (hasta la confirmación inicial), debemos usar git reset y git commit --amend.

Esto es lo que hace:

  1. git log --oneline. Encuentra el SHA de tu compromiso inicial.
  2. Supongamos que nuestro SHA es fe7d5d1. Ejecute git reset fe7d5d1. Esto restablecerá la rama a la confirmación inicial.
  3. Ahora usa git add . para organizar todos tus cambios.
  4. A continuación, modifique su compromiso inicial, git commit --amend -m "Initial commit".
  5. Confirma que solo tienes una confirmación simple ahora con git log --oneline.

PRECAUCIÓN: Nunca reescribir/calabaza/rebase compromete ya ha empujado a un acuerdo de recompra a distancia.

+1

¿Qué pasa si he pasado todo el historial a un repositorio privado en bitbucket, pero solo quiero pasar el estado actual (es decir, rebasado) a github? – Doug

+1

La idea es nunca reescribir la historia que ya se ha propagado a otros. En su caso, si solo tiene acceso al repositorio privado, es seguro volver a establecer la base. –

+0

No puedo simplemente reescribir el historial para el repositorio de GitHub y mantener el historial de BitBucket? Es decir, "Confirmar" todos mis cambios actuales como una única confirmación. – Doug

Cuestiones relacionadas