- Gerardo Catalas | Backend Developer (.NET & SQL Server)/
- Blog/
- Guía rápida de Git: Comandos esenciales y avanzados/
Guía rápida de Git: Comandos esenciales y avanzados
Tabla de contenido
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.
| Comando | Acció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:
- Working Directory: Tu carpeta local donde editas los archivos.
- Staging Area (Index): El área de preparación. Aquí “apuntas” qué cambios quieres incluir en tu próxima captura (commit).
- 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.
| Comando | Descripció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 --edit | Abre el archivo de configuración manual. |
Iniciar y Clonar #
| Comando | Descripció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.
| Comando | Descripció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 --amend | Corrige 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.
| Comando | Descripción |
|---|---|
git log --oneline | Muestra el historial en líneas simples y compactas. |
git log --graph --decorate | Visualiza 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 diff | Compara los cambios en tu directorio de trabajo que aún no están en staging. |
git diff --cached | Compara 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).
| Comando | Descripción |
|---|---|
git branch -a | Lista 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.
| Comando | Descripció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 --force | Precaució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.
| Comando | Descripció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.
| Comando | Descripción |
|---|---|
git stash | Guarda tus cambios actuales en una pila temporal y te deja el directorio de trabajo limpio. |
git stash pop | Recupera tu último trabajo guardado y lo elimina de la pila. |
git stash apply | Recupera tu último trabajo guardado, pero lo mantiene en la pila (no lo elimina). |
git stash list | Lista 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 #
| Comando | Descripción |
|---|---|
git rebase <rama> | Mueve la base de tu rama actual al final de otra rama, manteniendo un historial lineal. |
git rebase -i HEAD~3 | Abre un modo interactivo para editar, unir o borrar los últimos 3 commits. |
git reflog | Registro detallado de cada movimiento del puntero HEAD; es tu salvavidas para rescatar commits “perdidos”. |
Etiquetas y Limpieza #
| Comando | Descripción |
|---|---|
git tag v1.0.0 | Crea una etiqueta ligera para marcar una versión importante de lanzamiento. |
git push origin --tags | Sube todas las etiquetas locales al servidor remoto (no suben por defecto). |
git clean -fd | Elimina del disco archivos y carpetas que no están siendo rastreados por Git. |
Notas y Referencias #
¿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) ygit restore(exclusivo para deshacer cambios en archivos). ↩︎ ↩︎Buena práctica: En lugar de
--force, intenta usargit 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. ↩︎