Ir al contenido
  1. Blog/

Guía rápida de Git: Comandos esenciales y avanzados

··7 mins

Dominar Git es fundamental en el desarrollo moderno. Esta guía está estructurada para servir tanto de aprendizaje como de consulta rápida (Cheat Sheet).

1. Lo Esencial (Tu navaja suiza) #

Si necesitas arrancar a trabajar rápido, esta es la lista de los comandos más importantes que te sacarán de casi cualquier apuro en tu día a día.

ComandoAcción
git init(Inicio) Convierte la carpeta actual en un repositorio Git local.
git clone <url>(Inicio) Descarga un repositorio remoto completo a tu máquina.
git status(Diario) Revisa qué archivos has modificado y en qué rama estás.
git add .(Diario) Prepara todos los archivos modificados para ser guardados.
git add <archivo>(Diario) Agrega un archivo específico al área de staging.
git commit -m "msg"(Diario) Guarda los cambios localmente con un mensaje descriptivo.
git push / git pull(Diario) Sube (push) o descarga (pull) cambios del servidor.
git fetch <remoto>(Diario) Descarga ramas y datos del remoto sin modificar tu código. (Más seguro que git pull al permitirte revisar antes de fusionar).
git switch <rama>(Ramas) Cambia de rama. (Forma moderna del clásico git checkout <rama>)1.
git switch -c <rama>(Ramas) Crea una rama nueva y cambia a ella. (Equivale a git checkout -b <rama>).

2. Conceptos Fundamentales #

Antes de profundizar en los comandos, es vital entender cómo gestiona Git la información.

Los 3 Estados de Git
Un archivo en Git siempre vive en una de estas tres áreas:

  1. Working Directory: Tu carpeta local donde editas los archivos.
  2. Staging Area (Index): El área de preparación. Aquí “apuntas” qué cambios quieres incluir en tu próxima captura (commit).
  3. Local Repository: Donde se guardan permanentemente las versiones (commits) en tu máquina.

3. Configuración y Creación #

Configuración Inicial #

Configura tu identidad. Esto se guarda en tu archivo .gitconfig global.

ComandoDescripción
git config --global user.name "Nombre"Define tu nombre de autor para las confirmaciones.
git config --global user.email "email"Define tu correo de autor.
git config --global core.editor "code --wait"Configura VS Code (o tu editor preferido) como editor de Git.
git config --global --editAbre el archivo de configuración manual.

Iniciar y Clonar #

ComandoDescripción
git init <carpeta>Crea un directorio nuevo y lo inicializa como repositorio.
git clone <url>Descarga un proyecto completo desde un servidor remoto (HTTP/SSH).

4. Flujo de Trabajo Detallado #

Gestión de Cambios (Add & Commit) #

El corazón del control de versiones consiste en crear puntos de restauración significativos.

ComandoDescripción
git add .Agrega todos los cambios de la carpeta actual al área de staging.
git add <archivo>Agrega un archivo específico al área de staging.
git commit -m "msg"Crea un commit con los cambios preparados en el área de staging.
git commit -am "msg"Atajo: Agrega todos los archivos modificados (ya rastreados) y hace commit en un paso.
git commit --amendCorrige el último commit (añade archivos olvidados o cambia el mensaje).
git rm --cached <archivo>Deja de rastrear un archivo en Git pero lo mantiene intacto en tu disco duro.

Consultar el Historial #

Para entender la evolución del proyecto o encontrar cuándo se introdujo un error.

💡 Tip: Cuando uses comandos de log largos, presiona la tecla q para salir de la vista de lectura y Espacio para bajar de página.

ComandoDescripción
git log --onelineMuestra el historial en líneas simples y compactas.
git log --graph --decorateVisualiza las ramas y etiquetas de forma gráfica en la consola.
git log -p <archivo>Muestra los cambios de código detallados realizados en un archivo específico.
git diffCompara los cambios en tu directorio de trabajo que aún no están en staging.
git diff --cachedCompara lo que tienes preparado en staging contra tu último commit.
git switch -d <commit>Viaja a un commit específico en modo de solo lectura (detached HEAD) para explorar sus archivos. El código del commit se obtiene utilizando git log primero. Por último, utiliza git switch - para volver a la rama donde estabas en un principio.

5. Ramas y Colaboración #

Manejo de Ramas (Branches) #

Las ramas permiten desarrollar funcionalidades en paralelo sin afectar la línea principal (main o master).

ComandoDescripción
git branch -aLista todas las ramas (tanto locales como remotas).
git switch <rama>Cambia a una rama existente. (El comando clásico git checkout <rama> aún es válido, pero se recomienda switch).
git switch -c <rama>Crea una rama nueva y cambia a ella de inmediato. (Alternativa moderna a git checkout -b).
git merge <rama>Trae los cambios de otra rama y los fusiona en tu rama actual.
git branch -d <rama>Borra una rama localmente (solo si ya fue fusionada de forma segura).

Repositorios Remotos #

Sincroniza tu trabajo con plataformas como GitHub, GitLab o Bitbucket.

ComandoDescripción
git remote add origin <url>Vincula tu repositorio local con un servidor remoto nuevo.
git fetch <remoto>Descarga ramas y datos del remoto sin modificar ni fusionar tu código actual.
git push -u origin <rama>Sube tu rama y la vincula para que en el futuro solo necesites escribir git push.
git push origin --delete <rama>Elimina una rama directamente en el repositorio remoto.
git push --forcePrecaución: Fuerza la subida sobreescribiendo el remoto. Úsalo con extremo cuidado2.

6. Resolución de Problemas y Deshacer #

Deshacer Cambios #

Git es muy benevolente; casi todo se puede recuperar mientras no borres la carpeta oculta .git.

ComandoDescripción
git restore <archivo>Descarta los cambios locales en un archivo y lo devuelve al estado del último commit1.
git reset HEAD <archivo>Saca un archivo del área de staging, conservando tus modificaciones en el código.
git revert <commit>Crea un nuevo commit que deshace de forma segura exactamente lo que hizo otro anterior.
git reset --hard <commit>Peligro: Borra todo el trabajo no guardado y vuelve al estado de un commit específico.

Almacenamiento Temporal (Stash) #

Útil cuando necesitas cambiar de rama urgentemente pero no quieres hacer un commit de un trabajo a medias.

ComandoDescripción
git stashGuarda tus cambios actuales en una pila temporal y te deja el directorio de trabajo limpio.
git stash popRecupera tu último trabajo guardado y lo elimina de la pila.
git stash applyRecupera tu último trabajo guardado, pero lo mantiene en la pila (no lo elimina).
git stash listLista todos los estados que tienes guardados temporalmente.

7. Herramientas Avanzadas #

Para cuando necesitas limpiar el historial o realizar tareas complejas de mantenimiento.

Rebase e Historial #

ComandoDescripción
git rebase <rama>Mueve la base de tu rama actual al final de otra rama, manteniendo un historial lineal.
git rebase -i HEAD~3Abre un modo interactivo para editar, unir o borrar los últimos 3 commits.
git reflogRegistro detallado de cada movimiento del puntero HEAD; es tu salvavidas para rescatar commits “perdidos”.

Etiquetas y Limpieza #

ComandoDescripción
git tag v1.0.0Crea una etiqueta ligera para marcar una versión importante de lanzamiento.
git push origin --tagsSube todas las etiquetas locales al servidor remoto (no suben por defecto).
git clean -fdElimina del disco archivos y carpetas que no están siendo rastreados por Git.

Notas y Referencias #


  1. ¿Por qué ya no se recomienda usar git checkout? Históricamente, este comando estaba sobrecargado: servía tanto para cambiar de ramas como para restaurar archivos modificados. Esta mezcla de funciones era confusa y propensa a errores, especialmente para quienes recién empezaban. Por ello, a partir de la versión 2.23 (2019), Git dividió sus responsabilidades en dos comandos mucho más lógicos y seguros: git switch (exclusivo para manejar ramas) y git restore (exclusivo para deshacer cambios en archivos). ↩︎ ↩︎

  2. Buena práctica: En lugar de --force, intenta usar git push --force-with-lease. Es una versión más segura que evitará que sobreescribas el trabajo de un compañero de equipo si este subió cambios al remoto que tú aún no has descargado. ↩︎

Gerardo Catalas
Autor
Gerardo Catalas
Me especializo en el desarrollo backend, con experiencia práctica en C# (.NET) y SQL Server. Actualmente continúo ampliando mis conocimientos en nuevas tecnologías mediante formación y proyectos personales.