Breaking

Post Top Ad

Your Ad Spot

viernes, 14 de junio de 2019

Git: Squash Multiple Commits en One Commit

Una de las cosas buenas de Git es su flexibilidad, que le permite realizar casi cualquier tarea en un árbol de fuentes que necesite. En este caso, me refiero a limpiar la historia de un árbol de origen mediante el aplastamiento de las confirmaciones.
Cuando aplasta los compromisos, está combinando 2 o más compromisos en un solo compromiso. Esto se puede hacer por muchas razones, una de las cuales es que el historial de origen debe limpiarse antes de compartir con su equipo o enviar una solicitud de extracción a un proyecto de código abierto. Por ejemplo, digamos que su historial de confirmación 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 se puede ver en los registros, el problema # 421 tomó algunos intentos para solucionarlo. Aunque es genial que se haya encontrado la solución, esto no es exactamente algo que quieras compartir con el resto de tu equipo. Todo lo que realmente les importa es la solución final para emitir # 421, pero no necesariamente cómo llegó allí. En casos como este, es posible que desee aplastar los compromisos para crear un compromiso agradable y limpio para este problema.
Para aplastar las confirmaciones deberás usar el rebasecomando de esta manera:
$ git rebase -i HEAD~4
Esto le dice a Git que vuelva a aplicar las últimas 4 confirmaciones sobre otra punta base. El -iindicador es corto --interactive, lo que abrirá su editor de texto predeterminado para que pueda editar los comandos antes de volver a basar. 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 origen. Sin embargo, si reemplaza "pick" por "squash", ese commit se combinará con el anterior. Continuando con nuestro ejemplo, nos gustaría combinar los compromisos 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 resultará en una única confirmación que es la combinación de cambios de los cuatro, con el mensaje de confirmación como una combinación de los 4 también. Para especificar un nuevo mensaje de confirmación, debe usar "reformular" en lugar de "seleccionar" en la primera confirmación.
O, si desea mantener solo el mensaje de confirmación "seleccionado", puede usar "reparación" en lugar de "aplastar" para los demás, lo que hará lo mismo que aplastar pero descartará el mensaje de confirmación.
Aquí están todos los comandos que se pueden usar al rebasar:
  • pick(o p): use commit
  • reword(o r): usa commit, pero edita el mensaje de commit
  • edit(o e): use commit, pero pare para enmendar
  • squash(o s): use commit, pero fusione en el commit anterior
  • fixup(o f): como "squash", pero descarta el mensaje de registro de esta confirmación
  • exec(o x): ejecuta el comando (el resto de la línea) usando shell
  • drop(o d): eliminar commit
Y algunas otras notas importantes de Git con respecto al modo interactivo al volver a basar las confirmaciones:
  • Las líneas se pueden reordenar, se ejecutan de arriba a abajo.
  • Si eliminas una línea allí se perderá el commit .
  • Sin embargo, si eliminas todo, la rebase será abortada.
  • Tenga en cuenta que los comentarios vacíos están comentados
Reparar sus compromisos 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 a través de un árbol de origen y comprender qué errores se han solucionado cuando un solo compromiso corrige un solo error, por ejemplo. Sin embargo, si alguna de estas confirmaciones ya se ha enviado al repositorio remoto, no se recomienda que se aplasten las confirmaciones, ya que estaría reescribiendo el historial.
Para obtener más información, recomiendo leer los documentos de Git para el rebasecomando aquí .

No hay comentarios.:

Publicar un comentario

Dejanos tu comentario para seguir mejorando!

Post Top Ad

Your Ad Spot

Páginas