Fundamentos de Git
Módulo 2: Fundamentos de Git
Section titled “Módulo 2: Fundamentos de Git”En este módulo aprenderás los conceptos y comandos fundamentales de Git. Dominar estos fundamentos es esencial para trabajar eficientemente con control de versiones.
Crear un repositorio local (git init)
Section titled “Crear un repositorio local (git init)”Un repositorio Git es un directorio que contiene tu proyecto y todo su historial de versiones. Puedes crear uno desde cero o clonar uno existente.
Inicializar un nuevo repositorio
Section titled “Inicializar un nuevo repositorio”# Crear directorio para el proyectomkdir mi-primer-proyectocd mi-primer-proyecto
# Inicializar repositorio Gitgit init
# Verificar que se creó el repositoriols -la# Verás una carpeta .git (contiene toda la información de Git)Estructura de un repositorio Git
Section titled “Estructura de un repositorio Git”.git/├── HEAD # Apunta a la rama actual├── config # Configuración del repositorio├── description # Descripción del repositorio├── hooks/ # Scripts de automatización├── info/ # Información adicional├── objects/ # Base de datos de objetos├── refs/ # Referencias (ramas, tags)└── logs/ # Logs de referencias# Verificar estado del repositorio git status
# Ver configuración del repositorio git config --list --local
# Ver información de la rama actual git branch
# Ver si hay commits git logConfigurar repositorio específico
Section titled “Configurar repositorio específico”# Configurar nombre y email solo para este repositoriogit config user.name "Nombre Específico"git config user.email "email.especifico@ejemplo.com"
# Ver configuración actualgit config --list --local
# Configurar rama por defectogit config init.defaultBranch mainEstados de un archivo: working, staging, committed
Section titled “Estados de un archivo: working, staging, committed”Entender los tres estados de los archivos en Git es fundamental para trabajar eficientemente.
Los tres estados explicados
Section titled “Los tres estados explicados”WORKING DIRECTORY STAGING AREA REPOSITORY(Directorio de (Índice) (Commits) trabajo)
archivo.txt → git add archivo.txt → git commit[Modified] [Staged] [Committed] ↑ ↓ └─────────── git checkout archivo.txt ←────────┘
Estados posibles:• Untracked: Archivo nuevo, Git no lo conoce• Modified: Archivo conocido pero con cambios• Staged: Archivo preparado para commit• Committed: Archivo guardado en el historial# Ver estado actual de todos los archivos git status
# Ver estado resumido git status -s
# Ver diferencias en working directory git diff
# Ver diferencias en staging area git diff --staged
# Ver diferencias entre commits git diff HEAD~1 HEADEjemplo práctico de estados
Section titled “Ejemplo práctico de estados”Crear archivo nuevo (Untracked)
Terminal window echo "Hola mundo" > saludo.txtgit status# Output: Untracked files: saludo.txtAgregar al staging area (Staged)
Terminal window git add saludo.txtgit status# Output: Changes to be committed: new file: saludo.txtModificar archivo ya staged (Modified + Staged)
Terminal window echo "Adiós mundo" >> saludo.txtgit status# Output:# Changes to be committed: new file: saludo.txt# Changes not staged: modified: saludo.txtConfirmar cambios (Committed)
Terminal window git add saludo.txt # Agregar modificacionesgit commit -m "Agregar archivo de saludo"git status# Output: nothing to commit, working tree clean
Agregar y confirmar cambios (git add, git commit)
Section titled “Agregar y confirmar cambios (git add, git commit)”Los comandos git add y git commit son los más utilizados en Git. Aprende todas sus variaciones.
git add - Agregar archivos al staging area
Section titled “git add - Agregar archivos al staging area”# Agregar archivo específicogit add archivo.txt
# Agregar múltiples archivosgit add archivo1.txt archivo2.txt
# Agregar todos los archivos modificadosgit add .
# Agregar todos los archivos (incluso eliminados)git add -A
# Agregar solo archivos ya rastreadosgit add -u# Agregar interactivamente (elegir qué cambios)git add -p archivo.txt
# Agregar por extensióngit add *.js
# Agregar por directoriogit add src/
# Ver qué se agregará sin agregarlogit add --dry-run .
# Deshacer git add (quitar del staging)git reset HEAD archivo.txtgit commit - Confirmar cambios
Section titled “git commit - Confirmar cambios”# Commit básico con mensajegit commit -m "Mensaje descriptivo del cambio"
# Commit con mensaje multilíneagit commit -m "Título del commit" -m "Descripción detallada del cambio"
# Commit abriendo editor para mensaje largogit commit
# Commit agregando automáticamente archivos modificadosgit commit -am "Mensaje del commit"
# Modificar el último commit (antes de push)git commit --amend -m "Nuevo mensaje"
# Commit vacío (útil para triggers)git commit --allow-empty -m "Trigger deployment"Mejores prácticas para commits
Section titled “Mejores prácticas para commits”# Formato recomendado:# tipo(alcance): descripción
# Tipos comunes:feat: nueva funcionalidadfix: corrección de bugdocs: cambios en documentaciónstyle: cambios de formato (espacios, comas, etc.)refactor: refactorización de códigotest: agregar o modificar testschore: tareas de mantenimiento
# Ejemplos:git commit -m "feat(auth): agregar sistema de login con JWT"git commit -m "fix(api): corregir error 500 en endpoint de usuarios"git commit -m "docs(readme): actualizar instrucciones de instalación"git commit -m "refactor(utils): simplificar función de validación"Consultar historial de commits (git log)
Section titled “Consultar historial de commits (git log)”El historial de commits es fundamental para entender la evolución de tu proyecto.
Comandos básicos de git log
Section titled “Comandos básicos de git log”# Ver historial completogit log
# Ver historial resumido (una línea por commit)git log --oneline
# Ver últimos N commitsgit log -5
# Ver commits con estadísticas de archivosgit log --stat
# Ver commits con diferenciasgit log -p
# Ver historial gráficogit log --graph --oneline --allFiltrar historial
Section titled “Filtrar historial”# Commits de un autor específicogit log --author="Juan Pérez"
# Commits desde una fechagit log --since="2024-01-01"
# Commits hasta una fechagit log --until="2024-12-31"
# Commits en un rango de fechasgit log --since="2024-01-01" --until="2024-01-31"
# Commits de la última semanagit log --since="1 week ago"# Commits que modificaron un archivo específicogit log -- archivo.txt
# Commits que modificaron archivos en un directoriogit log -- src/
# Buscar en mensajes de commitgit log --grep="fix"
# Buscar cambios en el códigogit log -S "función_específica"
# Commits que agregaron o eliminaron una líneagit log -G "patrón_regex"Formatos personalizados
Section titled “Formatos personalizados”# Formato personalizadogit log --pretty=format:"%h - %an, %ar : %s"
# Formato con coloresgit log --pretty=format:"%C(yellow)%h%C(reset) - %C(blue)%an%C(reset), %C(green)%ar%C(reset) : %s"
# Crear alias para formato personalizadogit config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
# Usar el aliasgit lgNavegar por el historial
Section titled “Navegar por el historial”# Ver commit específicogit show abc1234
# Ver archivos en un commit específicogit show abc1234 --name-only
# Ver diferencias entre commitsgit diff abc1234 def5678
# Ver diferencias entre commit y working directorygit diff abc1234
# Volver a un commit específico (temporal)git checkout abc1234
# Volver a la rama principalgit checkout mainIgnorar archivos con .gitignore
Section titled “Ignorar archivos con .gitignore”No todos los archivos deben ser versionados. El archivo .gitignore te permite especificar qué ignorar.
Crear archivo .gitignore
Section titled “Crear archivo .gitignore”# Crear .gitignore en la raíz del proyectotouch .gitignore
# Agregar patrones de archivos a ignorarecho "node_modules/" >> .gitignoreecho "*.log" >> .gitignoreecho ".env" >> .gitignore
# Confirmar el .gitignoregit add .gitignoregit commit -m "Agregar .gitignore"Patrones comunes en .gitignore
Section titled “Patrones comunes en .gitignore”# Dependenciasnode_modules/npm-debug.log*yarn-debug.log*yarn-error.log*
# Archivos de producción/build/dist
# Variables de entorno.env.env.local.env.development.local.env.test.local.env.production.local
# Logslogs*.log
# Cache.cache/.parcel-cache/
# IDEs.vscode/.idea/*.swp*.swo# Byte-compiled / optimized / DLL files__pycache__/*.py[cod]*$py.class
# Distribution / packaging.Pythonbuild/develop-eggs/dist/downloads/eggs/.eggs/lib/lib64/parts/sdist/var/wheels/*.egg-info/.installed.cfg*.egg
# Virtual environmentsvenv/env/ENV/
# IDE.vscode/.idea/*.swp
# OS.DS_StoreThumbs.db# Compiled class files*.class
# Log files*.log
# Package Files*.jar*.war*.nar*.ear*.zip*.tar.gz*.rar
# Maventarget/pom.xml.tagpom.xml.releaseBackuppom.xml.versionsBackuppom.xml.nextrelease.propertiesdependency-reduced-pom.xmlbuildNumber.properties.mvn/timing.properties
# Gradle.gradlebuild/
# IDEs.idea/.vscode/*.swp*.swo*~
# OS.DS_StoreThumbs.dbReglas de .gitignore
Section titled “Reglas de .gitignore”# Ignorar archivo específicoarchivo.txt
# Ignorar todos los archivos con extensión*.log*.tmp
# Ignorar directorio completodirectorio/
# Ignorar archivos en directorio específicodirectorio/*.txt
# Ignorar recursivamentedirectorio/**/*.log
# Excepción (NO ignorar)!importante.log
# Ignorar solo en raíz del proyecto/archivo-raiz.txt
# Comentarios# Este es un comentario# Los archivos de configuración local no deben versionarseComandos útiles para .gitignore
Section titled “Comandos útiles para .gitignore”# Ver qué archivos están siendo ignoradosgit status --ignored
# Verificar por qué un archivo está siendo ignoradogit check-ignore -v archivo.txt
# Forzar agregar archivo ignoradogit add -f archivo-ignorado.txt
# Dejar de rastrear archivo ya versionadogit rm --cached archivo.txtecho "archivo.txt" >> .gitignoregit commit -m "Dejar de rastrear archivo.txt"
# Limpiar archivos ignorados del working directorygit clean -fdXEjemplo práctico completo
Section titled “Ejemplo práctico completo”Vamos a crear un proyecto completo aplicando todos los conceptos aprendidos:
Crear proyecto y repositorio
Terminal window mkdir mi-aplicacion-webcd mi-aplicacion-webgit initgit config user.name "Tu Nombre"git config user.email "tu@email.com"Crear estructura inicial
Terminal window mkdir src css jstouch index.html src/app.js css/styles.cssecho "# Mi Aplicación Web" > README.mdCrear .gitignore
Terminal window cat > .gitignore << EOF# Logs*.loglogs/# Dependenciasnode_modules/# Archivos temporales*.tmp*.swp# Variables de entorno.env# OS.DS_StoreThumbs.dbEOFAgregar contenido inicial
Terminal window cat > index.html << EOF<!DOCTYPE html><html><head><title>Mi Aplicación</title><link rel="stylesheet" href="css/styles.css"></head><body><h1>Hola Mundo</h1><script src="src/app.js"></script></body></html>EOFecho "console.log('Aplicación iniciada');" > src/app.jsecho "body { font-family: Arial, sans-serif; }" > css/styles.cssPrimer commit
Terminal window git add .git statusgit commit -m "feat: estructura inicial del proyecto- Agregar HTML básico- Agregar CSS y JavaScript- Configurar .gitignore- Agregar README"Hacer más cambios
Terminal window echo "<p>Párrafo agregado</p>" >> index.htmlecho "/* Nuevo estilo */" >> css/styles.cssgit statusgit add index.htmlgit statusgit diff --stagedgit commit -m "feat: agregar párrafo en página principal"Ver historial
Terminal window git log --onelinegit log --statgit show HEAD
Comandos de ayuda y solución de problemas
Section titled “Comandos de ayuda y solución de problemas”# Ver ayuda de cualquier comandogit help addgit add --help
# Ver estado detalladogit status -v
# Ver qué cambios se perderíangit diff HEAD
# Deshacer cambios en working directorygit checkout -- archivo.txtgit checkout . # Todos los archivos
# Deshacer git add (quitar del staging)git reset HEAD archivo.txtgit reset HEAD . # Todos los archivos
# Ver configuración actualgit config --list
# Ver repositorios remotosgit remote -v
# Verificar integridad del repositoriogit fsckResumen
Section titled “Resumen”En este módulo has aprendido:
Fundamentos de Git- ✅ git init: Crear repositorios locales
- ✅ Estados de archivos: Working, Staging, Committed
- ✅ git add: Agregar cambios al staging area
- ✅ git commit: Confirmar cambios en el historial
- ✅ git log: Consultar historial de commits
- ✅ .gitignore: Ignorar archivos innecesarios
- ✅ Flujo básico: Modificar → Agregar → Confirmar
- ✅ Buenas prácticas: Commits descriptivos, estructura organizada
- ✅ Primer setup:
git init→git add .→git commit→git remote add→git push -u - ✅ Flujo diario:
git status→git add→git commit→git push - ✅ Nueva máquina:
git clone→ trabajar →git add→git commit→git push - ✅ Sincronización:
git pullantes de trabajar,git pushal terminar - ✅ Comandos esenciales: Los que usarás todos los días
- ✅ Problemas comunes: Soluciones a errores típicos
En el próximo módulo aprenderemos a trabajar con repositorios remotos en GitHub, incluyendo cómo clonar, conectar repositorios locales con remotos, y sincronizar cambios.