Unir varios commits en uno sin fusionarse

¿Es posible unir varios commits?

Este es mi caso:

Mi aplicación se ejecutó en OSX 10.6 y 10.7, así que arreglé algunas cosas para 10.6 y me comprometí, cambié a 10.7 y arreglé las correcciones de nuevo para que sean compatibles, luego me comprometo de nuevo. Luego volvimos a 10.6 y lo volvimos a comprobar y realizamos un pequeño commit nuevamente, etc. (tres o cuatro commits en total y todos estos commits son para el mismo problema)

Como ves, todos estos compromisos están estrechamente relacionados, por lo que me gustaría unirme a ellos. ¿Es esto posible?

Todavía tengo que trabajar en un problema más, así que no planeo fusionar la twig actual. Idealmente, me gustaría tener solo una confirmación por problema / error que resuelva.

EDITAR:

He impulsado mis compromisos ya que tengo que hacer esto en diferentes computadoras, pero la twig no está siendo utilizada por otra persona, todavía no.

Una forma agradable e interactiva es con git rebase -i . Echa un vistazo a una sucursal, mira el historial y elige un compromiso que esté antes del primer compromiso que quieras "unir" (se llama aplastamiento). Entonces

 git rebase -i <the commit> 

En un editor, se le mostrará una list de confirmaciones desde la que está justo después de la que eligió hasta la más reciente. Parece que

 pick 2f4b7fa Some commit message pick 19f58bd Some other commit message 

Encuentra el primer compromiso en los que deseas unirte. Deje ese set para "elegir". Luego, para todos aquellos a los que quieras agregar, cambia el "pick" por "squash" o simplemente "s". Marcar una confirmación "squash" significa que se combinará con la confirmación inmediatamente anterior (arriba). Luego guarda y sal. Se le pedirá un nuevo post de confirmación para la nueva confirmación que se creará. Guarde eso y salga, y listo. Tenga en count que también puede usar la vista rebase para mover las confirmaciones arrastrando las líneas. Por lo tanto, si tienes algunos commits que están fuera de service o necesitas mover commits para aplastarlos, también puedes hacerlo. Otra nota: si has transferido tus commits a un control remoto, esto puede hacer upload las cosas, especialmente si estás trabajando con otras personas que extraen de ese control remoto.

Editar : como ya has empujado la twig y sabes que nadie más la está usando, solo sigue los pasos anteriores y luego haz un git push origin master -f , suponiendo que el repository remoto es "origen" y estás en la twig maestra Es un impulso normal, pero el -f le dice que sobrescriba lo que esté en el control remoto y forzará que se apliquen los cambios. Es cuando estás trabajando a partir de un repository compartido por otros que esto se vuelve peligroso y / o confuso.

¿Has empujado tus compromisos? Si no, puedes probar git rebase -i. Tiene una opción squash para combinar commits. Aquí hay un enlace útil.

Si está en el recuadro de la window, la manera más cómoda es usar la function TortoiseGIT.

  • Simplemente abra la opción 'Mostrar logging' en el menu emergente
  • seleccionar confirmaciones
  • button derecho del ratón
  • 'Combinar para comprometerse'

hará todo el trabajo por ti, sin un tremendo baile VIM 🙂