<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Julio Linarez</title>
    <description>The latest articles on DEV Community by Julio Linarez (@juliolinarez).</description>
    <link>https://dev.to/juliolinarez</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F345760%2F2ed72732-d7eb-4311-a966-e1f0771cec74.png</url>
      <title>DEV Community: Julio Linarez</title>
      <link>https://dev.to/juliolinarez</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/juliolinarez"/>
    <language>en</language>
    <item>
      <title>Mejorando el git checkout</title>
      <dc:creator>Julio Linarez</dc:creator>
      <pubDate>Sat, 05 Apr 2025 18:14:12 +0000</pubDate>
      <link>https://dev.to/juliolinarez/mejorando-el-git-checkout-4h9c</link>
      <guid>https://dev.to/juliolinarez/mejorando-el-git-checkout-4h9c</guid>
      <description>&lt;p&gt;Hace un buen tiempo había encontrado un truco para ejecutar comando mas complejos usando los &lt;a href="https://git-scm.com/book/es/v2/Fundamentos-de-Git-Alias-de-Git" rel="noopener noreferrer"&gt;alias&lt;/a&gt; de git. Este es un sección del archivo &lt;code&gt;~/.gifconfig&lt;/code&gt; donde se describen los alias disponibles por la terminal.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[alias]
   sync = "!f() { git pull origin ${master:-$1} --rebase; }; f" 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;El truco es envolver lo que quieres en &lt;code&gt;"!f() { ... }; f"&lt;/code&gt;. &lt;code&gt;$1&lt;/code&gt; hace referencia al primera parámetro del comando ejecutado. Con &lt;code&gt;git sync develop&lt;/code&gt; recibimos &lt;code&gt;develop&lt;/code&gt; con solo &lt;code&gt;git sync&lt;/code&gt; se ejecuta el comando con &lt;code&gt;master&lt;/code&gt;. De esta forma podemos mantener sincronizado un rama con el destino haciendo rebase con un comando verificando incluso el estado de la rama remota. &lt;/p&gt;

&lt;p&gt;La verdad que usar alias de git una vez que te acostumbras y entiendes lo que pasa por debajo te vuelve más productivo. Estaba buscando un comando similar a la hora de cambiar de ramas para no tener que buscarlas&lt;/p&gt;

&lt;p&gt;Pero de pronto me conseguí un &lt;a href="https://medium.com/@mrWinston/smarter-git-checkout-using-fzf-to-supercharge-your-commandline-7507db600996" rel="noopener noreferrer"&gt;artículo&lt;/a&gt; que me mostró este comando.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git checkout “$(git branch — all | fzf | tr -d ‘[:space:]’)”
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Fzf es una de las cosas mas geniales de la terminal, permite visualizar y seleccionas de una lista fácilmente. Puedes ver como se instala &lt;a href="https://github.com/junegunn/fzf?tab=readme-ov-file#installation" rel="noopener noreferrer"&gt;acá&lt;/a&gt;. Fzf había usado en carpetas del sistema de archivos pero no con git. Parecía una buena idea. El comando no me funciono del todo bien pero marco un senda.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git checkout “$(git branch --no-color | sed 's/^[* ]*//' | fzf)"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esto era exactamente lo que quería, solo tenia que engancharlo con un alias de git y estaba completo. Pero con un poco de conocimiento de parámetros en bash tenemos esto:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[alias]
  co = "!f() { \
    if [ \"$#\" -eq 0 ]; then \
      branch=$(git branch --no-color | sed 's/^[* ]*//' | fzf); \
      if [ -n \"$branch\" ]; then \
        git checkout \"$branch\"; \
      fi; \
    else \
      git checkout \"$@\"; \
    fi; \
  }; f"

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Aca podemos ver como se ve cuando ejecutamos &lt;code&gt;git co&lt;/code&gt; (alias de &lt;code&gt;checkout&lt;/code&gt;)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffveq952ruq8evee0e89m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffveq952ruq8evee0e89m.png" alt="Preview" width="296" height="117"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ahora ejecutando &lt;code&gt;git co my-branch&lt;/code&gt; se ejecuta el &lt;code&gt;git checkout my-branch&lt;/code&gt; de toda la vida y con &lt;code&gt;git co&lt;/code&gt; (como en la foto) ejecuta el comando con &lt;code&gt;fzf&lt;/code&gt; y puede elegir entre un conjunto de ramas disponibles para rápidamente cambiar. Easy! 😏&lt;/p&gt;

&lt;h3&gt;
  
  
  Actualización
&lt;/h3&gt;

&lt;p&gt;Revisando la configuración de fzf y de git se pudo mejorar algunas cositas. Pruébenlo&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;co = "!f() { \
    if [ \"$#\" -eq 0 ]; then \
      branch=$(git branch --no-color -v | fzf --border --height 50% | sed -E 's/^[* ]*([^ ]+).*/\\1/'); \
      if [ -n \"$branch\" ]; then \
        git checkout \"$branch\"; \
      fi; \
    else \
      git checkout \"$@\"; \
    fi; \
  }; f"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>git</category>
      <category>programming</category>
      <category>tutorial</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
