git, aplastamiento se compromete sobre la marcha

Tengo un repository de git local, un repository remoto. Realicé 5 confirmaciones para el repository local desde la última extracción desde el control remoto.

Ahora necesito presionar a control remoto. Y necesito aplastar mis últimos 5 commits.

Puedo hacerlo por git rebase -i HEAD~5

Pero no es bueno No quiero cambiar nada en mi repository local. Quiero enviar un commit aplastado a control remoto y dejar 5 commits sin cambios en mi repository local.

¿Algunas ideas?

UPD: ¿qué pasa si tengo mi repository local con 5 commits? y necesito crear un nuevo repository remoto para compartir mi código con otros. ¿Cómo aplastar confirmaciones para este nuevo repository?

Ligera variación de la respuesta de Titas , sin tocar su twig master , y aplastando una nueva twig (que empujaría a su nuevo repository)

  git remote add newrepo url://of/your/new/repo git checkout -b newbranch master git merge --squash master git push -u newrepo newbranch:master 

Pero eso empujaría la historia completa del compromiso maestro, +1 (aplastado), en su nuevo repository.

Si quería un nuevo historial de sucursal, con su repository como después de las 5 nuevas confirmaciones, es más fácil:

  • clonar localmente su repository,
  • elimina el .git en ese clon local,
  • git init. (es decir, volver a crear un nuevo repository de git local a partir de todos los files existentes),
  • agrega todo y haz un commit,
  • agregue su control remoto (a su nuevo repository remoto),
  • y presione ese compromiso de su nuevo repository local.

Si solo quieres mantener tus cinco compromisos para reference, tal vez deberías trabajar en una sucursal con ellos.

  1. git branch new-branch master
  2. Haz tus compromisos. Como has hecho esto, solo reinicia el jefe de maestro:

    git reset --hard HEAD~5

  3. git merge --squash master new-branch
  4. git push

Terminará con commit aplastado en master y origin/master y 5 commits en new-branch .