3. Comandos Básicos de Git
A continuación se detallan los comandos esenciales para trabajar con Git, desde la creación de repositorios hasta el manejo de commits y el historial de cambios.
1. Crear y Clonar Repositorios
1.1. git init – Inicializar un Repositorio Local
Crea un nuevo repositorio Git en un directorio local:
mkdir mi-proyecto
cd mi-proyecto
git init
Se crea una carpeta oculta .git que almacena toda la información del repositorio.
1.2. git clone – Clonar un Repositorio Remoto
Descarga un repositorio existente desde un servidor remoto (GitHub, GitLab, etc.):
git clone https://github.com/usuario/repositorio.git
Opciones útiles:
git clone --branch desarrollo https://github.com/usuario/repositorio.git # Clona una rama específica
git clone --depth 1 https://github.com/usuario/repositorio.git # Clona solo el último commit (historial superficial)
2. Estado del Repositorio
2.1. git status – Ver el Estado Actual
Muestra archivos modificados, eliminados o sin seguimiento:
git status
Ejemplo de salida:
On branch main
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
modified: README.md
Untracked files:
(use "git add <file>..." to include in what will be committed)
nuevo-archivo.txt
2.2. git diff – Ver Cambios No Preparados
Compara cambios en archivos que aún no se han agregado al staging area:
git diff
Para ver cambios en archivos ya preparados (git add):
git diff --staged
3. Agregar Cambios al Staging Area
3.1. git add – Preparar Cambios para Commit
Agregar un archivo específico:
git add archivo.txt
Agregar todos los archivos modificados/eliminados:
git add . # Agrega todo en el directorio actual (incluye nuevos archivos)
git add -u # Solo archivos rastreados (modificaciones/eliminaciones)
git add -A # Todos los cambios (equivalente a `git add .` + `git add -u`)
4. Confirmar Cambios (git commit)
4.1. Commit Básico
Guarda los cambios preparados (git add) en el historial:
git commit -m "Mensaje descriptivo del cambio"
4.2. Commit Múltiple (Varios add en un Commit)
Si olvidaste agregar un archivo antes de hacer commit:
git add archivo-faltante.txt
git commit --amend -m "Nuevo mensaje del commit"
¡Cuidado! –amend modifica el último commit (no usar en commits ya subidos al repositorio remoto).
4.3. Saltar el Staging Area
Si quieres hacer commit de todos los archivos rastreados sin usar git add:
git commit -a -m "Mensaje"
(Equivalente a git add -u + git commit -m).
5. Historial de Cambios
5.1. git log – Ver el Historial de Commits
Muestra todos los commits en orden cronológico inverso:
git log
Opciones útiles:
| Comando | Descripción |
|---|---|
| git log –oneline | Muestra commits en una sola línea. |
| git log –graph | Muestra ramas y merges en formato gráfico. |
| git log -p | Muestra diferencias (diffs) en cada commit. |
| git log –since=”1 week” | Filtra commits recientes. |
5.2. git show – Detalles de un Commit
Muestra cambios específicos de un commit (hash o HEAD):
git show abc123 # Muestra el commit con hash `abc123`
git show HEAD # Muestra el último commit
6. Buenas Prácticas en Mensajes de Commit
6.1. Convencional Commits
Estructura recomendada para mensajes claros y estandarizados:
<tipo>[ámbito opcional]: <descripción>
[Cuerpo opcional]
[Pie de página opcional]
Ejemplos:
feat: agregar autenticación con JWT
fix(api): corregir error 500 en endpoint /users
docs: actualizar README.md
6.2. Tipos de Commits Más Comunes
| Tipo | Descripción |
|---|---|
| feat | Nueva funcionalidad. |
| fix | Corrección de errores. |
| docs | Cambios en documentación. |
| style | Formato (espacios, comas, etc.), sin cambios en lógica. |
| refactor | Reestructuración de código sin corregir errores. |
| test | Añadir o modificar pruebas. |
7. Diagrama de Flujo Básico de Git
graph LR
A[Working Directory] -->|git add| B[Staging Area]
B -->|git commit| C[Local Repository]
C -->|git push| D[Remote Repository]
D -->|git pull| A
8. Resumen de Comandos
| Comando | Uso |
|---|---|
| git init | Inicializa un repositorio local. |
| git clone |
Clona un repositorio remoto. |
| git status | Muestra el estado del repositorio. |
| git add |
Prepara cambios para commit. |
| git commit -m “msg” | Guarda cambios en el historial. |
| git log | Muestra el historial de commits. |
| git show |
Detalles de un commit específico. |
Siguiente: Ramas y Fusiones
Ejercicios
3.1 — Crea un repositorio local desde cero. Añade un archivo README.md con tu nombre, haz add y commit. Muestra el historial con git log --oneline.
3.2 — Modifica el README.md añadiendo una segunda línea. Antes de hacer commit, muestra los cambios con git diff. Luego añade el archivo al staging y verifica el estado con git status.
3.3 — Crea 3 commits con mensajes en formato Conventional Commits (feat:, fix:, docs:). Muestra el historial final con git log --oneline.
3.4 — El último commit tiene un mensaje poco descriptivo. Usa git commit --amend para corregirlo sin crear un commit nuevo. ¿Cuándo no deberías usar --amend?
3.5 — Clona el repositorio público https://github.com/torvalds/linux de forma superficial (solo el último commit, sin historial completo). ¿Cuánto ocupa la carpeta clonada comparada con un clone normal? (Solo ejecuta el clone superficial, no el completo si tu conexión es lenta.)
Soluciones
3.1
mkdir mi-proyecto && cd mi-proyecto
git init
echo "# Mi proyecto — Tu Nombre" > README.md
git add README.md
git commit -m "docs: add README"
git log --oneline
# a1b2c3d docs: add README
3.2
echo "Segunda línea de contenido" >> README.md
git diff
# diff --git a/README.md b/README.md
# +Segunda línea de contenido
git add README.md
git status
# On branch main
# Changes to be committed:
# modified: README.md
3.3
echo "función de login" > login.js
git add login.js
git commit -m "feat: add login function"
echo "fix null check" >> login.js
git add login.js
git commit -m "fix: handle null user in login"
echo "# Login" >> README.md
git add README.md
git commit -m "docs: document login module"
git log --oneline
# c3d4e5f docs: document login module
# b2c3d4e fix: handle null user in login
# a1b2c3d feat: add login function
3.4
git commit --amend -m "docs: document login module with usage examples"
git log --oneline
# el hash cambia, pero solo hay 1 commit nuevo
No debes usar --amend si el commit ya está subido al repositorio remoto (git push), porque reescribe el historial y causará conflictos a otros colaboradores.
3.5
git clone --depth 1 https://github.com/torvalds/linux linux-shallow
du -sh linux-shallow/
# ~1.3 GB (solo el último snapshot, sin historial)
Un clone completo del kernel de Linux ocupa más de 4 GB. Con --depth 1 se descarga solo el último commit, lo que es útil en CI/CD para acelerar las builds.