2011-07-18 11 views
11

¿Es posible unir varias confirmaciones?Unir varias confirmaciones en una sin fusionar

Este es mi caso:

Mi runst aplicación en OSX 10.6 y 10.7 de modo he fijado algunas cosas para 10,6 continuación cometido, cambió a 10,7 y se fijaron las correcciones de nuevo por lo que son compatibles, a continuación, confirmar de nuevo . luego volvió a 10,6 y comprobar de nuevo y hacer un pequeño cometer otra vez, etc. (tres o cuatro compromete en total y todas estas confirmaciones son para el mismo tema)

Como se puede ver todos estos cometa, está estrechamente relacionada entonces 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 rama actual. Idealmente me gustaría tener solo una confirmación por problema/error que resuelvo.

EDIT:

me han empujado a mis confirmaciones ya que tengo que hacer esto en diferentes computadoras, pero la rama no está siendo utilizado por otra persona, aún no.

+0

¿Por qué recibí "-1"? – nacho4d

+0

De acuerdo. ¿Por qué los -1? Esta es una pregunta razonable, especialmente de un nuevo usuario de git. –

+2

upvote para negar la – rasjani

Respuesta

15

Una manera 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 muestra una lista de confirmaciones desde el más adecuado después de la que eligió a la más reciente. Parece que

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

Encuentra la primera confirmación en las que deseas unir. Deje ese conjunto 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 mensaje de confirmación para la nueva confirmación que se creará. Guarde eso y salga, y listo. Tenga en cuenta 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 servicio o necesitas mover commits para aplastarlos, también puedes hacerlo. Otra nota: si has transferido tus commits a un control remoto, esto puede hacer subir las cosas, especialmente si estás trabajando con otras personas que extraen de ese control remoto.

Editar: Puesto que usted ha empujado la rama ya, y usted sabe que nadie más lo está usando, sólo tiene que seguir los pasos anteriores, y luego hacer un git push origin master -f, asumiendo el repositorio remoto es "origen" y' re en la rama principal. 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 repositorio compartido por otros que esto se vuelve peligroso y/o confuso.

+2

-1 Nota: con las versiones más recientes de Git, también tiene la opción ('fixup'),' F' que es como la calabaza, pero sólo deja caer el mensaje de confirmación de la asociada comprometerse. – Benjol

+0

@ naocho4d: actualizado mi respuesta a la cuenta por editar –

+0

@Ryan, yo iba a preguntar cómo empujar desde entonces haciendo la forma habitual no tiene efectos deseados en este caso, pero que ya editarlo! Gracias :) – nacho4d

2

¿Ha presionado sus compromisos? Si no, puedes probar git rebase -i. Tiene una opción squash para combinar commits. Here's un enlace útil.

0

Si está en el recuadro de la ventana, la manera más cómoda es usar la función TortoiseGIT.

  • Sólo tiene que abrir la opción 'Mostrar registro' en el menú emergente
  • seleccione compromete
  • clic derecho
  • 'se combinan para un commit'

hará todo el trabajo para usted, sin bailar VIM horrible :)

Cuestiones relacionadas