Una de las cosas buenas de Git es su flexibilidad, que le permite realizar casi cualquier tarea en un 谩rbol de c贸digo fuente que necesite. En este caso, me refiero a limpiar el historial de un 谩rbol de fuentes aplastando las confirmaciones.
Cuando aplasta las confirmaciones, est谩 combinando 2 o m谩s confirmaciones en una 煤nica confirmaci贸n. Esto se puede hacer por muchas razones, una de las cuales es que el historial de la fuente debe limpiarse antes de compartirlo con su equipo o enviar una solicitud de extracci贸n a un proyecto de c贸digo abierto. Por ejemplo, digamos que su historial de confirmaciones reciente se parece a esto:
$ git log --oneline
b7c864c Seriously, #421 is fixed now
7729f48 Fixed typo
cc4f2b5 Didn't work, trying something else
b1339db Fixed issue #421
c9f9e96 Updated docs for feature ABC
4eeb10f Added feature ABC
...
Como puede ver en los registros, el problema # 421 requiri贸 varios intentos para solucionarse. Aunque es genial que finalmente se haya encontrado la soluci贸n, esto no es exactamente algo que le gustar铆a compartir con el resto de su equipo. Lo 煤nico que realmente les importa es la soluci贸n final al problema # 421, pero no necesariamente c贸mo llegaste all铆. En casos como este, es posible que desee aplastar las confirmaciones juntas para crear una confirmaci贸n agradable y limpia para este problema.
Para aplastar las confirmaciones, deber谩 usar el rebase
comando como este:
$ git rebase -i HEAD~4
Esto le dice a Git que vuelva a aplicar las 煤ltimas 4 confirmaciones sobre otra sugerencia base. los -i
bandera es la abreviatura de --interactive
, que abrir谩 su editor de texto predeterminado para que pueda editar los comandos antes de reajustar. Para nuestro ejemplo anterior, ver铆amos un editor de texto con las 煤ltimas 4 confirmaciones en orden inverso, como el siguiente:
pick b1339db Fixed issue #421
pick cc4f2b5 Didn't work, trying something else
pick 7729f48 Fixed typo
pick b7c864c Seriously, #421 is fixed now
Cualquier confirmaci贸n con la palabra clave “picK” permanecer谩 en el 谩rbol de fuentes. Sin embargo, si reemplaza “pick” con “squash”, esa confirmaci贸n se combinar谩 con la anterior. Continuando con nuestro ejemplo, nos gustar铆a combinar las confirmaciones de esta manera:
pick b1339db Fixed issue #421
squash cc4f2b5 Didn't work, trying something else
squash 7729f48 Fixed typo
squash b7c864c Seriously, #421 is fixed now
Guardar sus ediciones en este archivo dar谩 como resultado una 煤nica confirmaci贸n que es la combinaci贸n de los cambios de los cuatro, y el mensaje de confirmaci贸n es una combinaci贸n de los 4 tambi茅n. Para especificar un nuevo mensaje de confirmaci贸n, debe utilizar “reword” en lugar de “elegir” en la primera confirmaci贸n.
O, si desea mantener solo el mensaje de confirmaci贸n “elegido”, puede usar “arreglar” en lugar de “aplastar” para los dem谩s, lo que har谩 lo mismo que aplastar pero descartar谩 el mensaje de confirmaci贸n.
Estos son todos los comandos que se pueden usar al reajustar:
pick
(op
): use commitreword
(or
): use commit, pero edite el mensaje de commitedit
(oe
): use commit, pero det茅ngase para enmendarsquash
(os
): usa la confirmaci贸n, pero fusiona la confirmaci贸n anteriorfixup
(of
): como “squash”, pero descarta el mensaje de registro de esta confirmaci贸nexec
(ox
): ejecutar comando (el resto de la l铆nea) usando shelldrop
(od
): eliminar el compromiso
Y algunas otras notas importantes de Git con respecto al modo interactivo al reajustar confirmaciones:
- Las l铆neas se pueden reordenar, se ejecutan de arriba a abajo.
- Si quita una l铆nea all铆 ese compromiso se perder谩.
- Sin embargo, si elimina todo, la rebase se cancelar谩.
- Tenga en cuenta que las confirmaciones vac铆as est谩n comentadas
Arreglar sus confirmaciones de esta manera es una buena pr谩ctica antes de compartir con los miembros de su equipo o antes de enviar los cambios a un repositorio remoto. Es mucho m谩s f谩cil leer un 谩rbol de fuentes y comprender qu茅 errores se han corregido cuando una sola confirmaci贸n corrige un solo error, por ejemplo. Sin embargo, si alguna de estas confirmaciones ya se ha enviado al repositorio remoto, no se recomienda aplastar las confirmaciones, ya que estar铆a reescribiendo el historial.
Para obtener m谩s informaci贸n, recomiendo leer los documentos de Git para rebase
mando Aqu铆.