10 Comandos Secretos de Git Que te ahorrarán Horas cada Semana

Git es esencial para el desarrollo de software moderno, pero muchos desarrolladores solo usan lo básico y pasan por alto una serie de comandos poderosos.

Aquí te traigo 10 comandos secretos que te harán ahorrar tiempo y mejorar tu flujo de trabajo. ¡Vamos a descubrirlos!

1. El Botón de Deshacer de Git

Cuando cometes un error y quieres deshacer los cambios en un archivo o deshacer el “staging” sin perder el trabajo, git restore es tu salvavidas.

Descartar cambios en un archivo:

git restore <nombre-del-archivo>

Deshacer un archivo del “staging”:

git restore --staged <nombre-del-archivo>

2. Una Forma Más Inteligente de Cambiar de Rama

Si estás acostumbrado a usar git checkout para cambiar entre ramas, te encantará git switch. Es más específico para esta tarea.

Cambiar a una rama existente:

git switch <nombre-de-la-rama>

Crear y cambiar a una nueva rama:

git switch -c <nombre-de-nueva-rama>

3. Trabaja de Manera Más Eficiente

¿Trabajas en un monorepositorio enorme? Con git sparse-checkout solo puedes descargar las carpetas o archivos que realmente necesitas.

Habilitar sparse-checkout:

git sparse-checkout init --cone

Agregar directorios específicos:

git sparse-checkout set <dir1> <dir2>

4. Compara Rango de Commits Como un Profesional

¿Necesitas comparar dos versiones de una rama o serie de parches? git range-diff facilita la revisión de cambios entre rangos de commits.

Comparar rangos de commits:

git range-diff <rango-commit-1> <rango-commit-2>

5. Agrega Metadatos a los Commits Sin Desorden

A veces no basta con un mensaje de commit. Con git notes puedes agregar información adicional sin ensuciar el historial de commits.

Agregar una nota a un commit:

git notes add -m "Tu nota aquí" <hash-del-commit>

Ver las notas:

git log --show-notes

6. Trabaja en Varias Ramas Simultáneamente ️

Si necesitas trabajar en varias ramas a la vez, git worktree permite crear directorios separados para cada una, evitando tener que cambiar constantemente.

Crear un nuevo worktree para una rama:

git worktree add ../nuevo-directorio <nombre-de-la-rama>

Listar todos los worktrees:

git worktree list

7. Encuentra Bugs Como un Detective ️‍♂️

Si necesitas encontrar qué commit introdujo un error, git bisect te ayudará a hacer una búsqueda binaria en tu historial de commits.

Iniciar bisect:

git bisect start

Marcar un commit como “malo”:

git bisect bad

Marcar un commit como “bueno”:

git bisect good <hash-del-commit>

Resetear cuando termines:

git bisect reset

8. Reescribe la Historia Sin Romper Nada

Con git replace puedes crear un commit de reemplazo sin cambiar el hash original del commit.

  • Crear un commit de reemplazo
    git replace <hash-commit-antiguo> <hash-commit-nuevo>

9. Encuentra y Repara Corrupciones en el Repositorio

Si sospechas que tu repositorio está corrupto, git fsck verifica y te ayuda a recuperar objetos perdidos.

Verificar el repositorio:

git fsck --full

10. Crea Tus Propios Comandos de Git

¿Cansado de escribir comandos largos? Con git alias puedes crear atajos personalizados para tus operaciones más comunes.

Agregar un alias:

git config --global alias.co checkout

Usar el alias:

git co <nombre-de-la-rama>

¿Cómo Masterizar GIT BISECT?

Vamos a profundizar en git bisect. Si tienes que encontrar el commit que introdujo un bug, este comando hace el trabajo de manera rápida y eficiente.

Pasos:

1. Iniciar la búsqueda

git bisect start

2. Marcar el commit problemático

git bisect bad

3. Marcar un commit anterior como “bueno”

git bisect good <hash-del-commit-bueno>

4. Git selecciona un commit intermedio. Prueba y marca como “bueno” o “malo”

git bisect good o git bisect bad

5. Repite hasta que Git encuentre el commit exacto que causó el error

Consejo Pro: Automatiza este proceso con un script de prueba.

git bisect run ./test-script.sh

Conclusión

Git es mucho más que solo commit, push y pull. Con estos comandos secretos, puedes ahorrar tiempo, solucionar problemas complejos y ser más eficiente. ¡Ahora es tu turno de probarlos!