{"id":67255,"date":"2023-06-26T18:38:11","date_gmt":"2023-06-26T16:38:11","guid":{"rendered":"https:\/\/kinqsta.com\/es\/?p=67255&#038;preview=true&#038;preview_id=67255"},"modified":"2023-08-21T12:06:16","modified_gmt":"2023-08-21T10:06:16","slug":"git-avanzado","status":"publish","type":"post","link":"https:\/\/kinqsta.com\/es\/blog\/git-avanzado\/","title":{"rendered":"Git Avanzado: Comandos Avanzados Adem\u00e1s de los B\u00e1sicos"},"content":{"rendered":"<p><a href=\"https:\/\/git-scm.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Git<\/a> es una potente herramienta para el control de versiones y tiene una especie de monopolio en este \u00e1mbito. Para la mayor\u00eda de las tareas cotidianas, Git puede ser sencillo de utilizar gracias a su repetici\u00f3n de comandos. Sin embargo, hay muchas situaciones en las que necesitas algo m\u00e1s que lo b\u00e1sico. Por ello, existen un mont\u00f3n de comandos avanzados de Git que pueden llevar tus habilidades de Git al siguiente nivel.<\/p>\n<p>Esto tambi\u00e9n te introducir\u00e1 en varios conceptos de Git con los que normalmente no te encontrar\u00edas. Por ejemplo, almacenar temporalmente en lugar de confirmar cambios, volver a basar y a\u00f1adir archivos a tu staging area. Una vez que los aprendas, puede que descubras que tienes un valor a\u00fan mayor para tu equipo.<\/p>\n<p>En esta entrada del blog, introduciremos los distintos commandos avanzados que querr\u00e1s conocer. Sin embargo, para utilizarlos, necesitas tener a mano algunas habilidades, conceptos e informaci\u00f3n. Veamos esto primero.<br \/>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc><\/p>\n<h2>Requisitos Previos Recomendados<\/h2>\n<p>Aunque seas capaz de aprender lo <a href=\"https:\/\/kinqsta.com\/es\/blog\/git-para-desarrollo-web\/\" rel=\"noopener\">b\u00e1sico de Git<\/a> y entender algunos de los comandos intermedios, como <code>git delete<\/code>, necesitas m\u00e1s habilidades para manejar los comandos avanzados.<\/p>\n<p>Los consejos que compartimos aqu\u00ed no ser\u00e1n adecuados para un principiante en Git, as\u00ed que si el <a href=\"https:\/\/kinqsta.com\/es\/blog\/control-versiones-wordpress\/\" rel=\"noopener\">control de versiones<\/a>, en general, es nuevo para ti, te recomendamos que pases alg\u00fan tiempo utilizando los comandos b\u00e1sicos a diario antes de buscar a\u00f1adir m\u00e1s cosas a tu repertorio.<\/p>\n<p>En resumen, aqu\u00ed tienes una lista r\u00e1pida de los aspectos que debes comprender:<\/p>\n<ul>\n<li>Conceptos b\u00e1sicos de Git como commits, branches, pull requests, etc.<\/li>\n<li>Familiaridad con comandos b\u00e1sicos de Git como <code>git add<\/code>, <code>git merge<\/code>, <code>git commit<\/code>, y <code>git push<\/code>.<\/li>\n<li>Para las tareas avanzadas de Git, necesitas ser capaz de <a href=\"https:\/\/kinqsta.com\/es\/blog\/linux-comandos\/\" rel=\"noopener\">navegar por un Terminal<\/a>.<\/li>\n<\/ul>\n<p>Es \u00fatil tener experiencia trabajando con Git en un entorno de equipo, ya que muchos de estos comandos pueden tener un impacto significativo en una base de c\u00f3digos compartida. Por ejemplo, puede ser que s\u00f3lo utilices algunos de estos comandos en un puesto de responsabilidad. Esto significa que debes tener cuidado y saber <em>cu\u00e1ndo<\/em> utilizas estos comandos.<\/p>\n<h2>Git Avanzado: 12 Comandos Poderosos que Querr\u00e1s Conocer<\/h2>\n<p>El resto de este art\u00edculo cubrir\u00e1 12 comandos Git avanzados diferentes que te llevar\u00e1n m\u00e1s all\u00e1 de lo b\u00e1sico y te convertir\u00e1n en un mago de Git. Empecemos con un comando que puede que utilices m\u00e1s que otros.<\/p>\n<h3>1. Rebasing<\/h3>\n<p>En primer lugar, rebasing es un potente comando de Git que es una alternativa a una solicitud de extracci\u00f3n. Te permite arrastrar todos los nuevos commits que hagas tras una divergencia de rama a una nueva rama y ranurar los cambios en la punta de la base. Esto te resultar\u00e1 \u00fatil si quieres incorporar cambios de otra rama sin crear un commit de fusi\u00f3n por el motivo que sea.<\/p>\n<p>Un caso de uso com\u00fan para el rebasing es cuando est\u00e1s trabajando en una rama de caracter\u00edsticas y quieres incorporar cambios de la rama principal sin crear una confirmaci\u00f3n de fusi\u00f3n. Ayuda a mantener limpio el historial de tu proyecto, aunque puede tardar m\u00e1s en ejecutarse y puedes ver m\u00e1s errores durante una fusi\u00f3n.<\/p>\n<p>Para volver a basar una rama, utiliza el comando <code>git rebase<\/code>. Aqu\u00ed tienes un ejemplo en el que estamos fusionando una rama con otra:<\/p>\n<pre><code class=\"language-bash\">git checkout foo-branch\n\ngit rebase main\n<\/code><\/pre>\n<p>Tambi\u00e9n puedes listar los commits que vas a liberar y darte la oportunidad de editarlos de antemano. As\u00ed, puedes combinar commits, editar mensajes de commit, etc. Puedes utilizar la bandera <code>--interactive<\/code> o <code>--i<\/code> para realizar un &#8216;rebase interactivo&#8217;<\/p>\n<pre><code class=\"language-bash\">git rebase --interactive &lt;other-branch-name&gt;<\/code><\/pre>\n<p>Hablando de eso, combinar confirmaciones en una sola para ordenar un historial de confirmaciones es un caso de uso com\u00fan para el rebase. Esto puede hacer que tu historial de confirmaciones sea m\u00e1s f\u00e1cil de leer y entender.<\/p>\n<p>Para hacer esto durante un rebase, sigue la bandera con el n\u00famero de confirmaciones que te gustar\u00eda combinar, lo que combinar\u00e1 las confirmaciones en una sola:<\/p>\n<pre><code class=\"language-bash\">git rebase -i HEAD~3\n<\/code><\/pre>\n<p>Esto abrir\u00e1 una ventana interactiva de revisi\u00f3n, muy parecida a la ventana de confirmaciones, donde puedes elegir y editar las confirmaciones que quieres eliminar:<\/p>\n<figure id=\"attachment_155613\" aria-describedby=\"caption-attachment-155613\" style=\"width: 1000px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-155613 size-full\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2023\/06\/git-rebase-terminal.png\" alt=\"A partial Terminal window showing the output from a git rebase command. The screen shows three commits, alongside hash IDs and the \u2018pick\u2019 command. Underneath, there is a list of commands to help create a custom rebase.\" width=\"1000\" height=\"606\"><figcaption id=\"caption-attachment-155613\" class=\"wp-caption-text\">Ejecutar un git rebase en el Terminal.<\/figcaption><\/figure>\n<p>Tienes una lista de confirmaciones en la parte superior de la pantalla y una selecci\u00f3n de comandos en la parte inferior, junto con alguna otra informaci\u00f3n relevante. La opci\u00f3n por defecto es <code>pick<\/code> un commit, que lo selecciona como el que quieres utilizar sin cambios.<\/p>\n<p>Sin embargo, hay <a href=\"https:\/\/git-scm.com\/docs\/git-rebase\" target=\"_blank\" rel=\"noopener noreferrer\">muchos otros comandos<\/a> que te ayudar\u00e1n a navegar por un rebase. Por ejemplo, puedes reformular un commit o combinar varios commits juntos. Para hacer cambios y utilizar los comandos, trabajar\u00e1s con el editor de tu Terminal. El predeterminado suele ser Vim, lo que significa que <a href=\"https:\/\/linuxhandbook.com\/basic-vim-commands\/\" target=\"_blank\" rel=\"noopener noreferrer\">necesitas conocer ese editor<\/a>.<\/p>\n<p>El \u00faltimo paso es guardar tus cambios y luego enviarlos a la rama remota.<\/p>\n<h3>2. Reverting, Resetting y Unstaging<\/h3>\n<p>Git tiene mala fama cuando se trata de deshacer cambios. Es un proceso dif\u00edcil en general, con tendencia a generar errores. Sin embargo, si haces cambios en tu directorio de trabajo o en tu \u00e1rea de staging que quieres deshacer, hay algunos comandos de Git que pueden ayudarte.<\/p>\n<p>De hecho, Git te orienta sobre c\u00f3mo deshacer un archivo si ejecutas un comando <code>git status<\/code>:<\/p>\n<figure id=\"attachment_155614\" aria-describedby=\"caption-attachment-155614\" style=\"width: 1000px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-155614\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2023\/06\/git-status-guidance.png\" alt=\"A Terminal window showing the user running a git status command. The output shows the current branch and the changes to be committed. There\u2019s also instructions to unstage a file.\" width=\"1000\" height=\"435\"><figcaption id=\"caption-attachment-155614\" class=\"wp-caption-text\">Git te muestra c\u00f3mo deshacer un archivo durante su salida de estado.<\/figcaption><\/figure>\n<p>De este modo, puedes eliminar una confirmaci\u00f3n de la rama actual y enviarla a otro lugar con facilidad:<\/p>\n<pre><code class=\"language-bash\">git reset HEAD &lt;commit&gt;\n<\/code><\/pre>\n<p>Esto tiene el efecto de hacer retroceder tu rama una confirmaci\u00f3n, como si eliminaras la \u00faltima confirmaci\u00f3n conocida. Incluso puedes tener un caso de uso en el que quieras restablecer una rama a su estado original. En este caso, puedes restablecer contra el origen remoto, por ejemplo, utilizando <code>git reset --hard origin\/main<\/code>. Sin embargo, ten en cuenta que estos cambios desaparecer\u00e1n para siempre.<\/p>\n<p>Aunque el comando <code>git checkout<\/code> es uno de los que utilizar\u00e1s a menudo y se considera b\u00e1sico, tambi\u00e9n puedes utilizarlo para deshacer archivos antes de una confirmaci\u00f3n:<\/p>\n<pre><code class=\"language-bash\">git checkout -- &lt;filename&gt;\n<\/code><\/pre>\n<p>Observa el espacio entre los guiones y el nombre del archivo. Aqu\u00ed, el comando deshace el archivo que especifiques y descarta los cambios del directorio de trabajo. Ten en cuenta que esto borrar\u00e1 cualquier cambio local que hagas en un archivo. Por ello, comprueba dos y tres veces que no necesitas esos cambios no guardados.<\/p>\n<p>Tambi\u00e9n puedes utilizar <code>git revert<\/code> los cambios que hagas en una confirmaci\u00f3n. Sin embargo, esto no deshace los cambios, sino que crea una nueva confirmaci\u00f3n basada en deshacer los cambios dentro de la anterior.<\/p>\n<p>La principal diferencia aqu\u00ed es que el comando no mover\u00e1 ning\u00fan puntero de referencia a la nueva confirmaci\u00f3n, sino que mantendr\u00e1 las confirmaciones antiguas. Esto es \u00fatil cuando quieres deshacer cambios sin eliminarlos de tu historial de confirmaciones.<\/p>\n<p>El comando espera recibir una referencia, y es sencillo revertir la \u00faltima confirmaci\u00f3n:<\/p>\n<pre><code class=\"language-bash\">git revert HEAD\n<\/code><\/pre>\n<p>Sin embargo, tienes mucho m\u00e1s margen para restaurar y modificar archivos y confirmaciones. Las dos pr\u00f3ximas entradas de esta lista de comandos avanzados de Git se ocupar\u00e1n de ellas.<\/p>\n<h3>3. Restauraci\u00f3n archivos a su estado por defecto<\/h3>\n<p>Con Git, puedes restaurar f\u00e1cilmente un archivo a su estado por defecto utilizando un comando bastante nuevo: <code>git restore<\/code>. De hecho, deber\u00edas considerarlo un sustituto de <code>git reset<\/code> en la mayor\u00eda de las circunstancias, ya que ofrece mucha m\u00e1s potencia bajo el cap\u00f3. Por ejemplo, puedes conseguir el mismo resultado con <code>git restore --staged &lt;filename&gt;<\/code> que con <code>git reset HEAD<\/code>.<\/p>\n<p>Sin embargo, el comando puede hacer m\u00e1s cosas: tambi\u00e9n puede restaurar archivos a sus estados predeterminados. Puedes ver c\u00f3mo hacerlo si ejecutas tambi\u00e9n <code>git status <\/code>:<\/p>\n<pre><code class=\"language-bash\">git restore &lt;filename&gt;\n<\/code><\/pre>\n<p>Esto eliminar\u00e1 los cambios del directorio de trabajo como si no hubiera pasado nada. Al igual que con <code>git checkout -- &lt;filename&gt;<\/code>, debes asegurarte de que no quieres ninguno de los cambios locales, ya que desaparecer\u00e1n para siempre.<\/p>\n<h3>4. Modificaci\u00f3n de confirmaciones<\/h3>\n<p>Probablemente habr\u00e1 muchas ocasiones en las que env\u00edes una confirmaci\u00f3n y te des cuenta de que has olvidado incluir algo importante. Con Git, puedes modificar f\u00e1cilmente la confirmaci\u00f3n para incluir los cambios que faltan.<\/p>\n<p>Para ello sigue un proceso espec\u00edfico:<\/p>\n<ul>\n<li>Primero, haz los cambios en los archivos que necesites para el proyecto.<\/li>\n<li>Prep\u00e1ralos como es habitual utilizando <code>git add<\/code>.<\/li>\n<li>Vuelve a confirmar esos cambios en el \u00e1rea de preparaci\u00f3n utilizando un comando diferente para realizar la confirmaci\u00f3n:<\/li>\n<\/ul>\n<pre><code class=\"language-bash\">git commit --amend\n<\/code><\/pre>\n<p>Esto modifica el commit original con el nuevo utilizando tu \u00e1rea de staging para ello. Por tanto, aseg\u00farate de que no necesitas la versi\u00f3n antigua del commit, ya que se perder\u00e1. Tambi\u00e9n te recomendamos que utilices la bandera <code>--amend<\/code> con commits locales en lugar de remotos, por razones similares a las que tratamos en otra parte de este post.<\/p>\n<p>Tambi\u00e9n puedes utilizar <code>git commit --amend<\/code> para editar s\u00f3lo el mensaje de confirmaci\u00f3n con el siguiente comando:<\/p>\n<pre><code class=\"language-bash\">git commit --amend -m \"New commit message\"\n<\/code><\/pre>\n<h3>5. Registro de Git<\/h3>\n<p>Utilizar el registro de Git es valioso para ayudarte a comprender el historial de un repositorio. Sin embargo, no clasificar\u00edamos el comando <code>git log<\/code> como avanzado. En su lugar, puedes utilizar <a href=\"https:\/\/git-scm.com\/docs\/git-log\" target=\"_blank\" rel=\"noopener noreferrer\">varias opciones<\/a> para filtrar la salida seg\u00fan tus necesidades:<\/p>\n<pre><code class=\"language-bash\">git log\n\ngit log --decorate\n\ngit log --stat\n<\/code><\/pre>\n<p>Por ejemplo, al decorar una entrada del registro se imprimen los nombres de referencia de todas las confirmaciones mostradas. La opci\u00f3n <code>--stat<\/code> muestra las inserciones y eliminaciones de una confirmaci\u00f3n:<\/p>\n<figure id=\"attachment_155612\" aria-describedby=\"caption-attachment-155612\" style=\"width: 1000px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-155612\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2023\/06\/git-log-stat.png\" alt=\"A Terminal window showing the output of a git log --stat command. It shows two commits, with the hash highlighted in gold, the author, date of commit, the commit message, and both the number of files changed and inserted.\" width=\"1000\" height=\"651\"><figcaption id=\"caption-attachment-155612\" class=\"wp-caption-text\">Ejecutando un comando git log &#8211;stat en el Terminal.<\/figcaption><\/figure>\n<p>Tambi\u00e9n puedes utilizar otras opciones para personalizar la salida del registro, lo que se denomina \u00ablimitaci\u00f3n de confirmaciones\u00bb Por ejemplo, toma los siguientes comandos:<\/p>\n<pre><code class=\"language-bash\">git log --author=&lt;author-name&gt;\n\ngit log --grep=&lt;pattern-string&gt;\n<\/code><\/pre>\n<p>Aqu\u00ed puedes filtrar el registro por nombres de autor o patrones de texto espec\u00edficos. De hecho, puedes combinar varias opciones y banderas para generar un registro con un prop\u00f3sito espec\u00edfico. Por ejemplo, toma este comando:<\/p>\n<pre><code class=\"language-bash\">git log --oneline --author=&lt;author-name&gt; --since=&lt;date&gt; feature-temp\n<\/code><\/pre>\n<p>Busca todos los commits con la rama <strong>feature-temp<\/strong> de un autor singular desde una fecha especificada, y luego impr\u00edmelos utilizando entradas de una sola l\u00ednea. Ten en cuenta que el par\u00e1metro <code>&lt;date&gt;<\/code> tambi\u00e9n puede ser una cadena:<\/p>\n<pre><code class=\"language-bash\">--since=\u201dTwo weeks ago\u201d\n<\/code><\/pre>\n<p>Adem\u00e1s, si quieres buscar un archivo concreto en lugar de una rama, puedes ejecutar<\/p>\n<pre><code class=\"language-bash\">git log --oneline --author=bartonfink --since=\u201d5 days ago\u201d -- readme.rm\n<\/code><\/pre>\n<p>Este conjunto de ejemplos s\u00f3lo roza la superficie de lo que puedes hacer con tus registros, pero hay mucho margen para encontrar commits exactos en ellos en funci\u00f3n de tus criterios de b\u00fasqueda.<\/p>\n<h3>6. Hooks Git<\/h3>\n<p>Es probable que a veces utilices macros y otros scripts automatizados para ayudar a ejecutar c\u00f3digo. Git tambi\u00e9n incluye este tipo de funcionalidad en forma de ganchos. Estos scripts se ejecutan autom\u00e1ticamente en respuesta a determinados eventos, como confirmaciones o env\u00edos. Tambi\u00e9n hay muchas formas de utilizar ganchos para aplicar formato al c\u00f3digo, ejecutar pruebas y mucho m\u00e1s.<\/p>\n<p>Hay dos tipos de ganchos: del lado del cliente y del lado del servidor:<\/p>\n<ul>\n<li>Los ganchos del lado del cliente se activan bas\u00e1ndose en acciones locales como confirmaciones y fusiones.<\/li>\n<li>Los ganchos del lado del servidor se activar\u00e1n debido a operaciones de red. Por ejemplo, cuando un repositorio recibe una confirmaci\u00f3n enviada, entre otros muchos ejemplos.<\/li>\n<\/ul>\n<p>Git siempre rellenar\u00e1 tu repositorio con varios ganchos de ejemplo una vez que ejecutes un <code>git init<\/code>. Sin embargo, debes eliminar la extensi\u00f3n <strong>.sample<\/strong> para poder utilizarlos:<\/p>\n<figure id=\"attachment_155615\" aria-describedby=\"caption-attachment-155615\" style=\"width: 1000px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-155615\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2023\/06\/sample-hooks.png\" alt=\"A Finder window in macOS showing the hidden hooks folder for a Git repo. It contains a host of sample hook script files, each with a .sample extension.\" width=\"1000\" height=\"713\"><figcaption id=\"caption-attachment-155615\" class=\"wp-caption-text\">Una carpeta en macOS que muestra los ganchos de ejemplo que Git instala al iniciarse.<\/figcaption><\/figure>\n<p>Ten en cuenta que s\u00f3lo puedes ejecutar un tipo de gancho a la vez, aunque es posible utilizar varios scripts a la vez <a href=\"https:\/\/stackoverflow.com\/questions\/30104343\/multiple-git-hooks-for-the-same-trigger\" target=\"_blank\" rel=\"noopener noreferrer\">con un poco de trabajo<\/a>. Por ello, los nombres de tus archivos deben corresponder al tipo de gancho que quieras utilizar bas\u00e1ndote en los scripts de ejemplo: <strong>pre-commit<\/strong>, <strong>update<\/strong>, etc.<\/p>\n<h4>Crear un hook Git<\/h4>\n<p>Para crear un gancho Git, necesitas crear un script ejecutable en el subdirectorio <strong>.git\/hooks <\/strong>sin extensi\u00f3n. Seguir\u00e1 ejecut\u00e1ndose siempre que lo a\u00f1adas a la carpeta <strong>hooks<\/strong>.<\/p>\n<p>Puedes utilizar cualquier lenguaje de programaci\u00f3n que desees, siempre que pueda ejecutarse como un ejecutable. Te sugerimos <a href=\"https:\/\/kinqsta.com\/es\/blog\/ruby-on-rails-vs-node-js\/\" rel=\"noopener\">Ruby<\/a> o <a href=\"https:\/\/kinqsta.com\/es\/blog\/comandos-python\/\" rel=\"noopener\">Python<\/a>, pero puedes utilizar <a href=\"https:\/\/kinqsta.com\/es\/blog\/lenguajes-script\/\" rel=\"noopener\">Bash, Perl y muchos otros<\/a>. Todo lo que tienes que hacer aqu\u00ed es cambiar la ruta a tu int\u00e9rprete desde la predeterminada de Bash:<\/p>\n<pre><code class=\"language-bash\">#!\/usr\/bin\/env python\n<\/code><\/pre>\n<p>A partir de aqu\u00ed, puedes escribir tu c\u00f3digo con normalidad. Por ejemplo, aqu\u00ed tienes un script <code>prepare-commit<\/code> en Python que pide al usuario que escriba buenos mensajes de confirmaci\u00f3n:<\/p>\n<pre><code class=\"language-python\">#!\/usr\/bin\/env python\n\nimport sys, os\n\npath_commit_msg = sys.argv[1]\n\nwith open(commit_msg_filepath, 'w') as f:\n\nf.write(\"# You\u2019ll need to provide a better commit message than that, buddy!\")\n<\/code><\/pre>\n<p>Aunque no siempre es necesario, te recomendamos que ejecutes <code>chmod +x .git\/hooks\/&lt;hook-name&gt;<\/code> desde la l\u00ednea de comandos para asegurarte de que puedes ejecutarlo.<\/p>\n<p>En general, los ganchos pueden ser una herramienta poderosa para automatizar tareas repetitivas e imponer las mejores pr\u00e1cticas dentro de tu equipo.<\/p>\n<h3>7. Referencias de commits<\/h3>\n<p>En Git, identificas los commits por el <a href=\"https:\/\/kinqsta.com\/es\/blog\/generar-claves-ssh\/\" rel=\"noopener\">hash decifrado<\/a> SHA-1. Aunque es posible referirse a los commits por su hash completo, esto puede ser tedioso y propenso a errores:<\/p>\n<pre><code class=\"language-bash\">bc7623b7a94ed3d8feaffaf7580df3eca4f5f5ca\n<\/code><\/pre>\n<p>En su lugar, Git proporciona varias formas de referirse a las confirmaciones utilizando nombres m\u00e1s cortos y memorables. Por ejemplo, puedes utilizar un nombre de rama o etiqueta. Por ejemplo, considera una rama llamada \u00abdesarrollar\u00bb. Aqu\u00ed tienes un ejemplo en el que nos referimos a la \u00faltima confirmaci\u00f3n de esta rama:<\/p>\n<pre><code class=\"language-bash\">git diff develop..HEAD\n<\/code><\/pre>\n<p>Esto muestra las diferencias entre la \u00faltima confirmaci\u00f3n (<code>HEAD<\/code>) en la rama \u00abdesarrollar\u00bb y la confirmaci\u00f3n actual.<\/p>\n<p>Tambi\u00e9n puedes referirte a una confirmaci\u00f3n por su posici\u00f3n relativa en el historial de confirmaciones. Por ejemplo, puedes referirte a dos confirmaciones anteriores a la actual utilizando la abreviatura <code>HEAD~2<\/code>:<\/p>\n<pre><code class=\"language-bash\">git diff HEAD~2..HEAD\n<\/code><\/pre>\n<p>Git tambi\u00e9n proporciona <a href=\"https:\/\/stackoverflow.com\/questions\/26785118\/head-vs-head-vs-head-also-known-as-tilde-vs-caret-vs-at-sign\" target=\"_blank\" rel=\"noopener noreferrer\">otras formas<\/a> de referirse a las confirmaciones, como utilizar el s\u00edmbolo \u00ab@\u00bb para referirse a la rama actual o utilizar el s\u00edmbolo \u00ab^\u00bb para referirse al padre de una confirmaci\u00f3n. Utilizando estas notaciones abreviadas, puedes ahorrar tiempo y evitar errores al trabajar con confirmaciones.<\/p>\n<h3>8. Stashing<\/h3>\n<p>En circunstancias normales, pensar\u00edas que no hay forma de almacenar los cambios que haces en los archivos sin confirmarlos. \u00abStashing\u00bb es la forma de guardado provisional de cambios. Es \u00fatil cuando necesitas cambiar de rama o trabajar en una tarea diferente, pero no quieres confirmar tus cambios todav\u00eda.<\/p>\n<p>Por ejemplo, si necesitas cambiar de rama para trabajar en algo a mitad del flujo, puedes almacenar los cambios en la rama actual y hacer checkout en la otra. Desde ah\u00ed, puedes trabajar en la otra rama, luego confirmar y enviar esos cambios. Luego puedes hacer checkout y recuperar tu trabajo en la rama original.<\/p>\n<p>Para almacenar cambios hay dos formas de hacerlo:<\/p>\n<pre><code class=\"language-bash\">git stash\n<\/code><\/pre>\n<p>Esto almacena tus cambios en un nuevo stash, y revierte tu directorio de trabajo a la \u00faltima confirmaci\u00f3n <strong>HEAD<\/strong> (el estado en que lo ten\u00edas antes de hacer nuevos cambios). Puedes listar los cambios utilizando <code>git stash list<\/code>, e inspeccionar el alijo utilizando <code>git stash show<\/code>. Este \u00faltimo comando tambi\u00e9n puede aceptar cualquier formato que acepte <code>git diff<\/code>.<\/p>\n<p>Desde aqu\u00ed, puedes cambiar de rama o trabajar en una tarea diferente. Cuando quieras recuperar tus cambios, ejecuta el siguiente comando:<\/p>\n<pre><code class=\"language-bash\">git stash apply\n<\/code><\/pre>\n<p>Esto aplicar\u00e1 los \u00faltimos cambios almacenados a tu directorio de trabajo. Sin embargo, ten en cuenta que a\u00fan puedes encontrarte con conflictos si cambias demasiado el archivo. Al fin y al cabo, <code>git stash<\/code> es una soluci\u00f3n temporal al problema en cuesti\u00f3n.<\/p>\n<p>Tambi\u00e9n puedes tener varios stashes, y puedes especificar qu\u00e9 stash aplicar utilizando lo siguiente:<\/p>\n<pre><code class=\"language-bash\">git stash apply stash@{n}\n<\/code><\/pre>\n<p>El marcador de posici\u00f3n <code>{n}<\/code> toma un n\u00famero entero, y <code>stash@{0}<\/code> representa el \u00faltimo alijo. La <a href=\"https:\/\/git-scm.com\/docs\/git-stash\" target=\"_blank\" rel=\"noopener noreferrer\">documentaci\u00f3n oficial de Git<\/a> incluye otros ejemplos de <code>git stash<\/code>.<\/p>\n<h3>9. Bisecting<\/h3>\n<p>Apostar\u00edamos a que todo el mundo se ha encontrado alguna vez con un <a href=\"https:\/\/kinqsta.com\/es\/blog\/herramientas-de-revision-de-codigo\/\" rel=\"noopener\">error o un problema<\/a> y no ten\u00eda ni idea de por d\u00f3nde empezar a buscar la soluci\u00f3n. En estas situaciones, \u00abbisecar\u00bb puede ayudarte a identificar r\u00e1pidamente la confirmaci\u00f3n que introdujo el problema.<\/p>\n<p>En pocas palabras, el comando busca errores mediante una b\u00fasqueda en tus confirmaciones. Una vez que encuentra el commit infractor, te lo devuelve. La potencia de este comando reside en todos los subcomandos que puedes utilizar.<\/p>\n<p>Para utilizar bisecting, primero tienes que ejecutar el comando <code>git bisect start<\/code>. Git te llevar\u00e1 al primer commit del historial de tu proyecto.<\/p>\n<p>A partir de aqu\u00ed, tienes que indicar si ese commit es bueno o malo utilizando los comandos pertinentes:<\/p>\n<pre><code class=\"language-bash\">git bisect good\n\ngit bisect bad\n<\/code><\/pre>\n<p>Git te llevar\u00e1 entonces al siguiente commit para comprobar su \u00abcalidad\u00bb Ten en cuenta que tambi\u00e9n puedes sustituir \u00abgood\u00bb por \u00abold\u00bb y \u00abbad\u00bb por \u00abnew\u00bb para ajustarlo a tu caso de uso espec\u00edfico (aunque no puedes mezclar t\u00e9rminos)<\/p>\n<p>A partir de aqu\u00ed, puedes seguir marcando cada confirmaci\u00f3n como buena o mala hasta que encuentres la confirmaci\u00f3n que introdujo el error. Sin embargo, no tienes que rastrear todas las confirmaciones: puedes especificar identificadores exactos que te ayuden a acotar y acortar tu b\u00fasqueda:<\/p>\n<pre><code class=\"language-bash\">git bisect bad feature-test\n<\/code><\/pre>\n<p>En este caso, se utiliza un nombre de rama, pero podr\u00eda ser una revisi\u00f3n espec\u00edfica utilizando un n\u00famero entero, una referencia hash, etc. En cualquier caso, una vez que caces y encuentres el fallo, puedes ejecutar cualquiera de los siguientes comandos para volver a tu c\u00f3digo m\u00e1s reciente:<\/p>\n<pre><code class=\"language-bash\">git bisect reset\n<\/code><\/pre>\n<p>Como con todos los comandos avanzados de Git de esta lista, hay mucho m\u00e1s que digerir, y la <a href=\"https:\/\/git-scm.com\/docs\/git-bisect\" target=\"_blank\" rel=\"noopener noreferrer\">documentaci\u00f3n de Git<\/a> ser\u00e1 una lectura esencial en este caso.<\/p>\n<h3>10. Comparar las ramas<\/h3>\n<p>Nuestra entrada sobre referencias de confirmaciones habla sobre el uso de <code>git diff<\/code>. Ahora es el momento de ver esto con m\u00e1s detalle. A menudo te encontrar\u00e1s con varias ramas que contienen cambios diferentes. Git te permite comparar las diferencias entre dos ramas utilizando el comando <code>git diff<\/code>. De hecho, puedes utilizarlo de varias formas, a menudo junto con otros comandos, para investigar y analizar un repositorio.<\/p>\n<p>El comando b\u00e1sico <code>git diff<\/code> te dar\u00e1 una salida con una visi\u00f3n general de los cambios. Se parece mucho a la salida de una investigaci\u00f3n de fusi\u00f3n de confirmaciones:<\/p>\n<figure id=\"attachment_155611\" aria-describedby=\"caption-attachment-155611\" style=\"width: 1000px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-155611\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2023\/06\/git-diff-output.png\" alt=\"A portion of the Terminal window that shows a typical git diff output. It shows the files being compared, the index refs, the key and legend for changes between the documents, and the actual changes themselves.\" width=\"1000\" height=\"540\"><figcaption id=\"caption-attachment-155611\" class=\"wp-caption-text\">Muestra la salida de una solicitud git diff.<\/figcaption><\/figure>\n<p>Sin embargo, puedes profundizar en ramas exactas, hashes y muchos m\u00e1s. Por ejemplo, para comparar dos ramas, ejecuta el comando <code>git diff branch1..branch2<\/code> y sustituye los marcadores de posici\u00f3n:<\/p>\n<pre><code class=\"language-bash\">git diff feature-branch pre-prod\n<\/code><\/pre>\n<p>Tambi\u00e9n puedes comparar las diferencias entre tu rama actual y otra rama:<\/p>\n<pre><code class=\"language-bash\">git diff HEAD..pre-prod\n<\/code><\/pre>\n<p>Ten en cuenta que utilizar dos puntos aqu\u00ed devolver\u00e1 la diferencia entre las dos puntas de las ramas. En cambio, tres puntos devolver\u00e1n la diferencia entre el ancestro com\u00fan de ambas ramas y lo utilizar\u00e1n para hacer la prueba.<\/p>\n<p>Al igual que <code>git log<\/code>, puedes limpiar la salida y refinar lo que devuelve. Por ejemplo, <code>git diff --name-only branch1..branch2<\/code> s\u00f3lo comprobar\u00e1 qu\u00e9 archivos difieren y omitir\u00e1 el contexto:<\/p>\n<figure id=\"attachment_155610\" aria-describedby=\"caption-attachment-155610\" style=\"width: 1000px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-155610\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2023\/06\/git-diff-name-only.png\" alt=\"A portion of a Terminal window that shows how to run a git diff --name-only command. It returns a list of file names only, as per the command.\" width=\"1000\" height=\"487\"><figcaption id=\"caption-attachment-155610\" class=\"wp-caption-text\">Ejecutando un comando git diff &#8211;name-only en el Terminal.<\/figcaption><\/figure>\n<p>Puede que encuentres que la salida es dif\u00edcil de analizar, especialmente si el \u00abdiff\u00bb es largo. En estos casos, puedes utilizar la opci\u00f3n <code>--color-words<\/code>:<\/p>\n<figure id=\"attachment_155609\" aria-describedby=\"caption-attachment-155609\" style=\"width: 1000px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-155609\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2023\/06\/git-diff-color-words.png\" alt=\"A Terminal window showing the lengthy output of a git diff request, complete with color references for words. It shows which files are being compared, explicit references to changes and deletion between files, and the changes themselves from the files. Each has color coding to help differentiate them from the rest of the text.\" width=\"1000\" height=\"636\"><figcaption id=\"caption-attachment-155609\" class=\"wp-caption-text\">Ejecutar el comando git diff &#8211;color-palabras y ver la salida en el Terminal.<\/figcaption><\/figure>\n<p>En general, <code>git diff<\/code> puede ser tan potente como otros comandos, especialmente cuando invocas ciertas opciones y refinas qu\u00e9 diferencias devuelve.<\/p>\n<h3>11. Aplicar commits individuales<\/h3>\n<p>A veces puedes querer aplicar un commit espec\u00edfico de una rama a otra sin fusionar las dos ramas. Git te permite hacerlo utilizando <code>git cherry-pick<\/code>. Debes utilizarlo con cuidado, pero puedes encontrar que <code>git cherry-pick<\/code> puede ayudarte en algunos escenarios.<\/p>\n<p>Una situaci\u00f3n es cuando tienes ramas de caracter\u00edsticas obsoletas que no fusionas en <code>main<\/code> o <code>trunk<\/code>. Podr\u00edas utilizar una combinaci\u00f3n de comandos (como <code>git log<\/code>) para desenterrar antiguos commits relevantes y volver a aplicarlos en otro lugar.<\/p>\n<p>Utiliza git log para encontrar la referencia de un commit. A partir de ah\u00ed, aseg\u00farate de que est\u00e1s en la rama a la que te gustar\u00eda hacer cherry pick de una referencia. Por ejemplo, supongamos que quieres hacer cherry-pick del commit <code>xxxxxaaaaaa<\/code> en la rama \u00ab<code>trunk<\/code>\u00ab. Primero, comprueba tu rama..<\/p>\n<pre><code class=\"language-bash\">git checkout trunk\n<\/code><\/pre>\n<p>&#8230;y luego selecciona tu commit:<\/p>\n<pre><code class=\"language-bash\">git cherry-pick xxxxxaaaaaa\n<\/code><\/pre>\n<p>Es probable que tu mensaje de confirmaci\u00f3n no est\u00e9 actualizado en muchas ocasiones. Para solucionarlo, puedes pasar la opci\u00f3n <code>--edit<\/code> al comando. Esto te permitir\u00e1 proporcionar un nuevo mensaje de confirmaci\u00f3n antes de la selecci\u00f3n.<\/p>\n<h3>12. Potenciando &#8216;git add&#8217;<\/h3>\n<p>Para nuestro \u00faltimo comando avanzado de Git, vamos a mostrarte <code>git add<\/code>. No, no es una errata: este comando fundamental de Git tiene un poder sorprendente bajo su cap\u00f3.<\/p>\n<p>Por ejemplo, si te encuentras a\u00f1adiendo archivos individuales al \u00e1rea de preparaci\u00f3n, puedes utilizar lo siguiente:<\/p>\n<pre><code class=\"language-bash\">git add -p\n<\/code><\/pre>\n<p>La opci\u00f3n <code>-p<\/code> te permite organizar los cambios de forma interactiva. Puedes revisar los cambios que has hecho en cada archivo y luego elegir los que vas a preparar. Esto podr\u00eda ahorrarte mucho tiempo y ayudarte a evitar escenificar un cambio no deseado.<\/p>\n<p>Aunque ya sabes que puedes organizar archivos individuales, tambi\u00e9n puedes especificar un directorio. Por ejemplo, para escenificar todos los archivos del directorio \u00ab<code>new-feature<\/code>\u00ab:<\/p>\n<pre><code class=\"language-bash\">git add new-feature\n<\/code><\/pre>\n<p>Puede que incluso quieras ver cu\u00e1l ser\u00e1 el resultado de un <code>git add<\/code> sin llevar a cabo el proceso en su totalidad. Tienes una opci\u00f3n para ello:<\/p>\n<pre><code class=\"language-bash\">git add --dry-run\n\ngit add -n\n<\/code><\/pre>\n<p>Cuando lo ejecutes, Git te mostrar\u00e1 si a\u00f1adir\u00e1 o ignorar\u00e1 los archivos. Hablando de archivos ignorados, tambi\u00e9n puedes a\u00f1adirlos al \u00e1rea de preparaci\u00f3n si lo deseas:<\/p>\n<pre><code class=\"language-bash\">git add --force\n\ngit add -f\n<\/code><\/pre>\n<p>A\u00f1adir archivos al \u00e1rea de preparaci\u00f3n puede ser m\u00e1s complejo que un simple escenario binario de \u00abA\u00f1adir o no a\u00f1adir\u00bb. Como tal, uno de los comandos m\u00e1s b\u00e1sicos de Git puede cubrir una mir\u00edada de eventualidades.<\/p>\n<h2>Resumen<\/h2>\n<p>Una vez que tengas los comandos b\u00e1sicos de <a href=\"https:\/\/git-scm.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Git<\/a> en el bolsillo, tendr\u00e1s el 80 por ciento de lo que necesitas para llevar a cabo las tareas habituales de control de versiones de tu proyecto. Sin embargo, en el 20 por ciento final es donde pueden brillar los comandos avanzados de Git.<\/p>\n<p>Comandos y t\u00e9cnicas como rebasing, bisecting, restaurar archivos, etc., te sacar\u00e1n r\u00e1pidamente de un apuro. Y lo que es m\u00e1s, puedes ofrecer un mayor valor a tu equipo y a tu proyecto, y podr\u00edas ayudar a agilizar los flujos de trabajo, aumentar la productividad y tener, en general, un mayor efecto como desarrollador.<\/p>\n<p>\u00bfAlguno de estos comandos avanzados de Git formar\u00e1 parte de tu trabajo diario? \u00a1H\u00e1znoslo saber en la secci\u00f3n de comentarios m\u00e1s abajo!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Git es una potente herramienta para el control de versiones y tiene una especie de monopolio en este \u00e1mbito. Para la mayor\u00eda de las tareas cotidianas, &#8230;<\/p>\n","protected":false},"author":199,"featured_media":67256,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[1288],"class_list":["post-67255","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-git"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Git Avanzado: Comandos Avanzados Adem\u00e1s de los B\u00e1sicos - Kinsta\u00ae<\/title>\n<meta name=\"description\" content=\"Git puede ser f\u00e1cil de usar, pero es un sistema de control de versiones complejo. En esta entrada veremos algunos comandos avanzados de Git para usuarios avanzados.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinqsta.com\/es\/blog\/git-avanzado\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Git Avanzado: Comandos Avanzados Adem\u00e1s de los B\u00e1sicos\" \/>\n<meta property=\"og:description\" content=\"Git puede ser f\u00e1cil de usar, pero es un sistema de control de versiones complejo. En esta entrada veremos algunos comandos avanzados de Git para usuarios avanzados.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinqsta.com\/es\/blog\/git-avanzado\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinsta.es\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-06-26T16:38:11+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-08-21T10:06:16+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/06\/advanced-git.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Jeremy Holcombe\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Git puede ser f\u00e1cil de usar, pero es un sistema de control de versiones complejo. En esta entrada veremos algunos comandos avanzados de Git para usuarios avanzados.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/06\/advanced-git.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@Kinsta_ES\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_ES\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jeremy Holcombe\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"18 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinqsta.com\/es\/blog\/git-avanzado\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinqsta.com\/es\/blog\/git-avanzado\/\"},\"author\":{\"name\":\"Jeremy Holcombe\",\"@id\":\"https:\/\/kinqsta.com\/es\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21\"},\"headline\":\"Git Avanzado: Comandos Avanzados Adem\u00e1s de los B\u00e1sicos\",\"datePublished\":\"2023-06-26T16:38:11+00:00\",\"dateModified\":\"2023-08-21T10:06:16+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinqsta.com\/es\/blog\/git-avanzado\/\"},\"wordCount\":3705,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinqsta.com\/es\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinqsta.com\/es\/blog\/git-avanzado\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/06\/advanced-git.jpg\",\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinqsta.com\/es\/blog\/git-avanzado\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinqsta.com\/es\/blog\/git-avanzado\/\",\"url\":\"https:\/\/kinqsta.com\/es\/blog\/git-avanzado\/\",\"name\":\"Git Avanzado: Comandos Avanzados Adem\u00e1s de los B\u00e1sicos - Kinsta\u00ae\",\"isPartOf\":{\"@id\":\"https:\/\/kinqsta.com\/es\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinqsta.com\/es\/blog\/git-avanzado\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinqsta.com\/es\/blog\/git-avanzado\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/06\/advanced-git.jpg\",\"datePublished\":\"2023-06-26T16:38:11+00:00\",\"dateModified\":\"2023-08-21T10:06:16+00:00\",\"description\":\"Git puede ser f\u00e1cil de usar, pero es un sistema de control de versiones complejo. En esta entrada veremos algunos comandos avanzados de Git para usuarios avanzados.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinqsta.com\/es\/blog\/git-avanzado\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinqsta.com\/es\/blog\/git-avanzado\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinqsta.com\/es\/blog\/git-avanzado\/#primaryimage\",\"url\":\"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/06\/advanced-git.jpg\",\"contentUrl\":\"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/06\/advanced-git.jpg\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinqsta.com\/es\/blog\/git-avanzado\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinqsta.com\/es\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Git\",\"item\":\"https:\/\/kinqsta.com\/es\/secciones\/git\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Git Avanzado: Comandos Avanzados Adem\u00e1s de los B\u00e1sicos\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinqsta.com\/es\/#website\",\"url\":\"https:\/\/kinqsta.com\/es\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Soluciones de alojamiento premium, r\u00e1pidas y seguras\",\"publisher\":{\"@id\":\"https:\/\/kinqsta.com\/es\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinqsta.com\/es\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinqsta.com\/es\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinqsta.com\/es\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinqsta.com\/es\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinqsta.com\/es\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinsta.es\/\",\"https:\/\/x.com\/Kinsta_ES\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinqsta.com\/es\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21\",\"name\":\"Jeremy Holcombe\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinqsta.com\/es\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g\",\"caption\":\"Jeremy Holcombe\"},\"description\":\"Senior Editor at Kinsta, WordPress Web Developer, and Content Writer. Outside of all things WordPress, I enjoy the beach, golf, and movies. I also have tall people problems.\",\"sameAs\":[\"https:\/\/www.linkedin.com\/in\/jeremyholcombe\/\"],\"url\":\"https:\/\/kinqsta.com\/es\/blog\/author\/jeremyholcombe\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Git Avanzado: Comandos Avanzados Adem\u00e1s de los B\u00e1sicos - Kinsta\u00ae","description":"Git puede ser f\u00e1cil de usar, pero es un sistema de control de versiones complejo. En esta entrada veremos algunos comandos avanzados de Git para usuarios avanzados.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinqsta.com\/es\/blog\/git-avanzado\/","og_locale":"es_ES","og_type":"article","og_title":"Git Avanzado: Comandos Avanzados Adem\u00e1s de los B\u00e1sicos","og_description":"Git puede ser f\u00e1cil de usar, pero es un sistema de control de versiones complejo. En esta entrada veremos algunos comandos avanzados de Git para usuarios avanzados.","og_url":"https:\/\/kinqsta.com\/es\/blog\/git-avanzado\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinsta.es\/","article_published_time":"2023-06-26T16:38:11+00:00","article_modified_time":"2023-08-21T10:06:16+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/06\/advanced-git.jpg","type":"image\/jpeg"}],"author":"Jeremy Holcombe","twitter_card":"summary_large_image","twitter_description":"Git puede ser f\u00e1cil de usar, pero es un sistema de control de versiones complejo. En esta entrada veremos algunos comandos avanzados de Git para usuarios avanzados.","twitter_image":"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/06\/advanced-git.jpg","twitter_creator":"@Kinsta_ES","twitter_site":"@Kinsta_ES","twitter_misc":{"Escrito por":"Jeremy Holcombe","Tiempo de lectura":"18 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinqsta.com\/es\/blog\/git-avanzado\/#article","isPartOf":{"@id":"https:\/\/kinqsta.com\/es\/blog\/git-avanzado\/"},"author":{"name":"Jeremy Holcombe","@id":"https:\/\/kinqsta.com\/es\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21"},"headline":"Git Avanzado: Comandos Avanzados Adem\u00e1s de los B\u00e1sicos","datePublished":"2023-06-26T16:38:11+00:00","dateModified":"2023-08-21T10:06:16+00:00","mainEntityOfPage":{"@id":"https:\/\/kinqsta.com\/es\/blog\/git-avanzado\/"},"wordCount":3705,"commentCount":0,"publisher":{"@id":"https:\/\/kinqsta.com\/es\/#organization"},"image":{"@id":"https:\/\/kinqsta.com\/es\/blog\/git-avanzado\/#primaryimage"},"thumbnailUrl":"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/06\/advanced-git.jpg","inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinqsta.com\/es\/blog\/git-avanzado\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinqsta.com\/es\/blog\/git-avanzado\/","url":"https:\/\/kinqsta.com\/es\/blog\/git-avanzado\/","name":"Git Avanzado: Comandos Avanzados Adem\u00e1s de los B\u00e1sicos - Kinsta\u00ae","isPartOf":{"@id":"https:\/\/kinqsta.com\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinqsta.com\/es\/blog\/git-avanzado\/#primaryimage"},"image":{"@id":"https:\/\/kinqsta.com\/es\/blog\/git-avanzado\/#primaryimage"},"thumbnailUrl":"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/06\/advanced-git.jpg","datePublished":"2023-06-26T16:38:11+00:00","dateModified":"2023-08-21T10:06:16+00:00","description":"Git puede ser f\u00e1cil de usar, pero es un sistema de control de versiones complejo. En esta entrada veremos algunos comandos avanzados de Git para usuarios avanzados.","breadcrumb":{"@id":"https:\/\/kinqsta.com\/es\/blog\/git-avanzado\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinqsta.com\/es\/blog\/git-avanzado\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinqsta.com\/es\/blog\/git-avanzado\/#primaryimage","url":"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/06\/advanced-git.jpg","contentUrl":"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/06\/advanced-git.jpg","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinqsta.com\/es\/blog\/git-avanzado\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinqsta.com\/es\/"},{"@type":"ListItem","position":2,"name":"Git","item":"https:\/\/kinqsta.com\/es\/secciones\/git\/"},{"@type":"ListItem","position":3,"name":"Git Avanzado: Comandos Avanzados Adem\u00e1s de los B\u00e1sicos"}]},{"@type":"WebSite","@id":"https:\/\/kinqsta.com\/es\/#website","url":"https:\/\/kinqsta.com\/es\/","name":"Kinsta\u00ae","description":"Soluciones de alojamiento premium, r\u00e1pidas y seguras","publisher":{"@id":"https:\/\/kinqsta.com\/es\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinqsta.com\/es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/kinqsta.com\/es\/#organization","name":"Kinsta","url":"https:\/\/kinqsta.com\/es\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinqsta.com\/es\/#\/schema\/logo\/image\/","url":"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinqsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinqsta.com\/es\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinsta.es\/","https:\/\/x.com\/Kinsta_ES","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinqsta.com\/es\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21","name":"Jeremy Holcombe","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinqsta.com\/es\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g","caption":"Jeremy Holcombe"},"description":"Senior Editor at Kinsta, WordPress Web Developer, and Content Writer. Outside of all things WordPress, I enjoy the beach, golf, and movies. I also have tall people problems.","sameAs":["https:\/\/www.linkedin.com\/in\/jeremyholcombe\/"],"url":"https:\/\/kinqsta.com\/es\/blog\/author\/jeremyholcombe\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinqsta.com\/es\/wp-json\/wp\/v2\/posts\/67255","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinqsta.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinqsta.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinqsta.com\/es\/wp-json\/wp\/v2\/users\/199"}],"replies":[{"embeddable":true,"href":"https:\/\/kinqsta.com\/es\/wp-json\/wp\/v2\/comments?post=67255"}],"version-history":[{"count":15,"href":"https:\/\/kinqsta.com\/es\/wp-json\/wp\/v2\/posts\/67255\/revisions"}],"predecessor-version":[{"id":67642,"href":"https:\/\/kinqsta.com\/es\/wp-json\/wp\/v2\/posts\/67255\/revisions\/67642"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinqsta.com\/es\/wp-json\/kinsta\/v1\/posts\/67255\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinqsta.com\/es\/wp-json\/kinsta\/v1\/posts\/67255\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinqsta.com\/es\/wp-json\/kinsta\/v1\/posts\/67255\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinqsta.com\/es\/wp-json\/kinsta\/v1\/posts\/67255\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinqsta.com\/es\/wp-json\/kinsta\/v1\/posts\/67255\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinqsta.com\/es\/wp-json\/kinsta\/v1\/posts\/67255\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinqsta.com\/es\/wp-json\/kinsta\/v1\/posts\/67255\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinqsta.com\/es\/wp-json\/kinsta\/v1\/posts\/67255\/translations\/es"},{"href":"https:\/\/kinqsta.com\/es\/wp-json\/kinsta\/v1\/posts\/67255\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinqsta.com\/es\/wp-json\/wp\/v2\/media\/67256"}],"wp:attachment":[{"href":"https:\/\/kinqsta.com\/es\/wp-json\/wp\/v2\/media?parent=67255"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinqsta.com\/es\/wp-json\/wp\/v2\/tags?post=67255"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinqsta.com\/es\/wp-json\/wp\/v2\/topic?post=67255"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}