Combinando múltiples confirmaciones antes de insertar Git [duplicado]

Resuelto muudscope asked hace 13 años • 8 respuestas

Tengo un montón de confirmaciones en mi repositorio local que son temáticamente similares. Me gustaría combinarlos en una única confirmación antes de pasar a un control remoto. ¿Cómo lo hago? Creo rebaseque hace esto, pero no puedo entender los documentos.

muudscope avatar Aug 04 '11 07:08 muudscope
Aceptado

Lo que quieres hacer se denomina "aplastar" en git. Hay muchas opciones cuando haces esto (¿demasiadas?), pero si solo quieres fusionar todas tus confirmaciones no enviadas en una sola confirmación, haz esto:

git rebase -i origin/master

Esto abrirá su editor de texto ( -ies para "interactivo") con un archivo similar a este:

pick 16b5fcc Code in, tests not passing
pick c964dea Getting closer
pick 06cf8ee Something changed
pick 396b4a3 Tests pass
pick 9be7fdb Better comments
pick 7dba9cb All done

Cambie todos los picka squash(o s) excepto el primero:

pick 16b5fcc Code in, tests not passing
squash c964dea Getting closer
squash 06cf8ee Something changed
squash 396b4a3 Tests pass
squash 9be7fdb Better comments
squash 7dba9cb All done

Guarde su archivo y salga de su editor. Luego se abrirá otro editor de texto que le permitirá combinar los mensajes de confirmación de todas las confirmaciones en un mensaje de confirmación grande.

¡Voilá! Buscar en Google "git squashing" le dará explicaciones de todas las demás opciones disponibles.

Leopd avatar Aug 04 '2011 00:08 Leopd

Si tiene muchas confirmaciones y solo desea aplastar las últimas X confirmaciones, busque el ID de la confirmación desde la cual desea comenzar a aplastar y haga

git rebase -i <that_commit_id>

Luego proceda como se describe en la respuesta de leopd, cambiando todos los picks a squashes excepto el primero.

Ejemplo :

871adf OK, feature Z is fully implemented      --- newer commit --┐
0c3317 Whoops, not yet...                                         |
87871a I'm ready!                                                 |
643d0e Code cleanup                                               |-- Join these into one
afb581 Fix this and that                                          |
4e9baa Cool implementation                                        |
d94e78 Prepare the workbench for feature Z     -------------------┘
6394dc Feature Y                               --- older commit

Puedes hacer esto (escribe el número de confirmaciones):

git rebase --interactive HEAD~[7]

O esto (escribe el hash de la última confirmación que no deseas aplastar):

git rebase --interactive 6394dc
Noich avatar Jan 22 '2014 09:01 Noich

Hay bastantes respuestas funcionales aquí, pero esta me pareció la más fácil. Este comando abrirá un editor, donde puede simplemente reemplazarlos pickpara squasheliminarlos/fusionarlos en uno solo.

git rebase -i HEAD~4

donde, 4es la cantidad de confirmaciones que desea agrupar en una. Esto también se explica aquí .

Si está buscando squashlas confirmaciones que también incluyen la primera confirmación, utilice este comando

git rebase -i --root
vikas027 avatar Oct 05 '2016 23:10 vikas027

Puedes hacer esto con git rebase -i, pasando la revisión que deseas usar como 'raíz':

git rebase -i origin/master

abrirá una ventana de edición que muestra todas las confirmaciones que ha realizado después de la última confirmación en origin/master. Puede rechazar confirmaciones, agrupar confirmaciones en una sola confirmación o editar confirmaciones anteriores.

Hay algunos recursos que probablemente puedan explicar esto mejor y mostrar algunos otros ejemplos:

http://book.git-scm.com/4_interactive_rebasing.html

y

http://gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html

Son las dos primeras páginas buenas que pude encontrar.

Justin Weiss avatar Aug 04 '2011 00:08 Justin Weiss

se me ocurrio

#!/bin/sh

message=`git log --format=%B origin..HEAD | sort | uniq | grep -v '^$'`
git reset --soft origin
git commit -m "$message"

Combina, ordena, unifica y elimina líneas vacías del mensaje de confirmación. Lo uso para cambios locales en una wiki de github (usando gollum)

ruediste avatar Mar 27 '2015 20:03 ruediste