Tengo ocho confirmaciones en una rama que me gustaría enviar por correo electrónico a algunas personas que aún no están iluminadas. Hasta ahora, todo lo que hago me da 8 archivos de parche o comienza a darme archivos de parche para cada confirmación en la historia de la rama, desde el principio de los tiempos. Usé git rebase --interactive para aplastar los commits, pero ahora todo lo que intento me da millones de parches desde el principio de los tiempos. ¿Qué estoy haciendo mal?
git format-patch master HEAD # yields zillions of patches, even though there's
# only one commit since master
git
patch
squash
git-squash
skiphoppy
fuente
fuente
Respuestas:
Recomiendo hacer esto en una rama desechable de la siguiente manera. Si sus confirmaciones están en la rama "líneas nuevas" y ya ha cambiado a su rama "maestra", esto debería ser el truco:
¡Espero que esto ayude!
fuente
git comit -m "My squashed commits"
contrario agregaría otros archivos sin seguimientogit checkout 775ec2a && git checkout -b patch && git merge --squash branchname
Solo para agregar una solución más al bote: si usa esto en su lugar:
Entonces todavía habrá 8 parches ... pero todos estarán en un solo archivo de parche y se aplicarán como uno con:
fuente
git rebase -i ...
y aplastarlos a todos en uno.Siempre uso git diff así que en tu ejemplo, algo como
fuente
git log
, vea mi respuesta para ver un ejemploEsta es una adaptación de la respuesta de Adam Alexander, en caso de que sus cambios estén en la rama maestra. Esto hace lo siguiente:
fuente
Como ya sabe, un
git format-patch -8 HEAD
le dará ocho parches.Si desea que sus 8 confirmaciones aparezcan como una sola, y no le importe volver a escribir el historial de su rama (
o-o-X-A-B-C-D-E-F-G-H
), puede:o, y sería una mejor solución, reproducir todos tus 8 commits desde
X
(el commit antes de tus 8 commits) en una nueva ramaDe esa manera, solo tiene una confirmación en la rama de "entrega", y representa todas sus últimas 8 confirmaciones
fuente
git merge master
simplemente hace un avance rápido y no aplasta los commits en uno. Cambie agit merge --squash master
para obtener todos los commits aplastados y visibles en el área organizada. Su flujo funcionará con este cambio. (Estoy usando git versión 2.1.0.)Parche de formato entre dos etiquetas:
fuente
La forma más fácil es usar
git diff
y agregargit log
si desea el mensaje de confirmación combinado que generaría el método de squash. Por ejemplo, para crear el parche entre commitabcd
y1234
:Luego, al aplicar el parche:
No olvide el
--binary
argumento degit diff
cuando se trata de archivos que no son de texto, por ejemplo, imágenes o videos.fuente
Basado en la respuesta de Adam Alexander:
fuente