{"meta":{"title":"Utilizar la rebase de Git en la línea de comando","intro":"Aquí hay un breve tutorial acerca de usar git rebase en la línea de comandos.","product":"Comienza","breadcrumbs":[{"href":"/es/get-started","title":"Comienza"},{"href":"/es/get-started/using-git","title":"Utilizar GitHub"},{"href":"/es/get-started/using-git/using-git-rebase-on-the-command-line","title":"Rebase de Git"}],"documentType":"article"},"body":"# Utilizar la rebase de Git en la línea de comando\n\nAquí hay un breve tutorial acerca de usar git rebase en la línea de comandos.\n\n## Utilizar el rebase de Git\n\nEn este ejemplo, se describirán todos los comandos `git rebase` disponibles, excepto `exec`.\n\nComenzaremos nuestro rebase escribiendo `git rebase --interactive HEAD~7` en la terminal. Nuestro editor de texto preferido mostrará las siguientes líneas:\n\n```text\npick 1fc6c95 Patch A\npick 6b2481b Patch B\npick dd1475d something I want to split\npick c619268 A fix for Patch B\npick fa39187 something to add to patch A\npick 4ca2acc i cant' typ goods\npick 7b36971 something to move before patch B\n```\n\nEn este ejemplo, haremos lo siguiente:\n\n* Fusionar mediante combinación con \"squash\" la quinta confirmación (`fa39187`) en la confirmación `\"Patch A\"` (`1fc6c95`), mediante `squash`.\n* Subir la última confirmación (`7b36971`) por delante de la confirmación `\"Patch B\"` (`6b2481b`) y mantenerla como `pick`.\n* Combinar la confirmación `\"A fix for Patch B\"` (`c619268`) en la confirmación `\"Patch B\"` (`6b2481b`) y omitir el mensaje de confirmación mediante `fixup`.\n* Dividir la tercera confirmación (`dd1475d`) en dos más pequeñas, mediante `edit`.\n* Corregir el mensaje del commit con error de escritura (`4ca2acc`), mediante `reword`.\n\nUf! Parece mucho trabajo, pero haciendo cada paso por vez, podemos concretar esos cambios fácilmente.\n\nPara comenzar, tendremos que modificar los comandos en el archivo para que luzca como sigue:\n\n```text\npick 1fc6c95 Patch A\nsquash fa39187 something to add to patch A\npick 7b36971 something to move before patch B\npick 6b2481b Patch B\nfixup c619268 A fix for Patch B\nedit dd1475d something I want to split\nreword 4ca2acc i cant' typ goods\n```\n\nSe ha cambiado el comando de cada línea, desde `pick` al comando que nos interesa.\n\nAhora, guarda y cierra el editor; esto comenzará la rebase interactiva.\n\nGit omite el primer comando de fusión mediante cambio de base, `pick 1fc6c95`, ya que no necesita hacer nada. Pasa al comando siguiente, `squash fa39187`. Como esta operación requiere tu entrada, Git vuelve a abrir tu editor de texto. El archivo que abre luce parecido a lo siguiente:\n\n```text\n# This is a combination of two commits.\n# The first commit's message is:\n\nPatch A\n\n# This is the 2nd commit message:\n\nsomething to add to patch A\n\n# Please enter the commit message for your changes. Lines starting\n# with '#' will be ignored, and an empty message aborts the commit.\n# Not currently on any branch.\n# Changes to be committed:\n#   (use \"git reset HEAD <file>...\" to unstage)\n#\n# modified:   a\n#\n```\n\nEste archivo es la manera de Git de decir, \"Esto es lo que voy a hacer con `squash`\". Enumera el mensaje de la primera confirmación (`\"Patch A\"`) y el de la segunda (`\"something to add to patch A\"`). Si estás satisfecho con estos mensajes de confirmación, puedes guardar el archivo y cerrar el editor. De lo contrario, tienes la opción de cambiar el mensaje de confirmación, simplemente, cambiando el texto.\n\nCuando el editor está cerrado, la rebase continúa:\n\n```text\npick 1fc6c95 Patch A\nsquash fa39187 something to add to patch A\npick 7b36971 something to move before patch B\npick 6b2481b Patch B\nfixup c619268 A fix for Patch B\nedit dd1475d something I want to split\nreword 4ca2acc i cant' typ goods\n```\n\nGit procesa los dos comandos `pick` (para `pick 7b36971` y `pick 6b2481b`).\n*También* procesa el comando `fixup` (`fixup c619268`), ya que no necesita ninguna interacción.\n`fixup` combina los cambios de `c619268` en el commit anterior, `6b2481b`. Los dos cambios tendrán el mismo mensaje de confirmación: `\"Patch B\"`.\n\nGit llega a la operación `edit dd1475d`, se detiene e imprime el siguiente mensaje en el terminal:\n\n```shell\nYou can amend the commit now, with\n\n        git commit --amend\n\nOnce you are satisfied with your changes, run\n\n        git rebase --continue\n```\n\nEn este punto, puedes editar cualquiera de los archivos de tu proyecto para hacer más cambios. Para cada cambio que haga, tendrá que realizar una confirmación nueva; para ello, escriba el comando `git commit --amend`. Cuando haya terminado de realizar todos los cambios, puede ejecutar `git rebase --continue`.\n\nDespués, Git llega al comando `reword 4ca2acc`. Este abre tu editor de texto una vez más y presenta la siguiente información:\n\n```text\ni cant' typ goods\n\n# Please enter the commit message for your changes. Lines starting\n# with '#' will be ignored, and an empty message aborts the commit.\n# Not currently on any branch.\n# Changes to be committed:\n#   (use \"git reset HEAD^1 <file>...\" to unstage)\n#\n# modified:   a\n#\n```\n\nComo antes, Git muestra el mensaje de confirmación para que lo edites. Puede cambiar el texto (`\"i cant' typ goods\"`), guardar el archivo y cerrar el editor. Git terminará la rebase y te devolverá al terminal.\n\n## Empuje de código rebasado en GitHub\n\nComo ha modificado el historial de Git, el valor `git push origin` habitual **no funcionará**. Tendrás que modificar el comando realizando un \"empuje forzado\" de tus últimos cambios:\n\n```shell\n# Don't override changes\n$ git push origin main --force-with-lease\n\n# Override changes\n$ git push origin main --force\n```\n\n> \\[!WARNING]\n> El empuje forzado tiene implicaciones serias ya que cambia la secuencia histórica de commits para la rama. Utilízalo con cuidado, especialmente si muchas personas acceden a tu repositorio.\n\n## Información adicional\n\n* [Resolver conflictos de fusión después de una rebase de Git](/es/get-started/using-git/resolving-merge-conflicts-after-a-git-rebase)"}