En Git, el flujo de trabajo se divide en cuatro áreas principales: el directorio de trabajo (donde se editan los archivos), el área de staging o índice (donde se preparan los cambios para confirmar), el repositorio local (donde se almcaenan las confirmaciones) y el repositorio remoto (donde se comparten los cambios).
Configuración Inicial de Git:
git config --global --list # Muestra la configuración global
git config --global --edit # Edita la configuración global de forma interactiva
git config --global --unset [expresión-regular] # Elimina una configuración global específica
git config --global user.nombre "tu_nombre" # Establece el nombre de usuario global
git config --global user.correo "tu_correo@ejemplo.com" # Define la dirección de correo electrónico global
git config --global https.proxy "servidor_proxy" # Configura un proxy para conexiones HTTPS
git config --global http.proxy "servidor_proxy" # Configura un proxy para conexiones HTTP
git config --list # Lista toda la configuración actual
git config --list --show-origin # Muestra la configuración con su origen
git config --local --list # Muestra la configuración local del repositorio (ejecutar dentro del directorio del repositorio)
Nota: El parámetro --global aplica la configuración a todos los repositorios en el sistema, miantras que --local permite ajustar configuraciones específicas para un repositorio individual.
Uso de Alias para Simplificar Comandos:
git config --global alias.<nombre-alias> "<comando-git>" # Define un alias
git <nombre-alias> [argumentos-opcionales] # Ejecuta el alias definido
</nombre-alias></comando-git></nombre-alias>
Gestión de Repositorios Locales:
git init <nombre-carpeta> # Crea un nuevo repositorio Git en la carpeta especificada
git remote add <nombre-rama-remota> <url-repositorio-remoto> # Vincula el repositorio local con uno remoto
git remote -v # Muestra detalles del repositorio remoto, incluyendo URLs de acceso
git pull <nombre-rama-remota> # Descarga y fusiona los cambios del repositorio remoto
git clone <url-repositorio-remoto> # Clona un repositorio remoto al directorio actual
</url-repositorio-remoto></nombre-rama-remota></url-repositorio-remoto></nombre-rama-remota></nombre-carpeta>
Preparación de Cambios para Confirmación:
git add <archivo> # Añade un archivo específico al área de staging
git add . # Añade todos los archivos modificados al área de staging
git add --all # Añade todos los cambios, incluyendo eliminaciones, al área de staging
git rm <archivo> # Elimina un archivo y registra la eliminación en el área de staging
git mv <nombre-actual> <nuevo-nombre> # Renombra un archivo y actualiza el área de staging
</nuevo-nombre></nombre-actual></archivo></archivo>
Inspección del Estado y Diferencias:
git status # Muestra el estado actual, con cambios no rastreados en rojo y cambios preparados en verde
git diff # Muestra las diferencias entre el directorio de trabajo y el área de staging
git diff <archivo> # Muestra las diferencias de un archivo específico en el directorio de trabajo
git diff HEAD -- <archivo> # Compara el directorio de trabajo con la última confirmación del repositorio
</archivo></archivo>
Deshacer Modificaciones no Confirmadas:
git clean -f # Elimina archivos no rastreados del directorio de trabajo
git clean -df # Elimina directorios y archivos no rastreados
git clean -ndf # Realiza una simulación (dry-run) para previsualizar qué se eliminaría
git checkout -- . # Revierte todos los cambios en el directorio de trabajo (solo archivos rastreados)
git checkout -- <archivo> # Revierte los cambios de un archivo específico en el directorio de trabajo
git reset . # Mueve todos los cambios del área de staging al directorio de trabajo
git reset <nombre-archivo> # Mueve un archivo específico del área de staging al directorio de trabajo
git reset --hard # Restaura el directorio de trabajo y el área de staging al estado de la última confirmación, descartando todos los cambios locales
</nombre-archivo></archivo>
Confirmación de Cambios en el Repositorio:
git commit -m "<mensaje>" # Crea una confirmación con un mensaje descriptivo
git commit <archivo> -m "<mensaje>" # Confirma los cambios de un archivo específico
git commit --amend -m "<nuevo-mensaje>" # Modifica el mensaje de la última confirmación (no usar si ya se ha enviado al remoto)
git commit --amend # Añade cambios adicionales a la última confirmación
git rebase -i # Permite combinar múltiples confirmaciones locales de forma interactiva
</nuevo-mensaje></mensaje></archivo></mensaje>
Historial de Confirmaciones y Comandos:
git log # Muestra el registro completo de confirmaciones
git log -<n> # Muestra las últimas N confirmaciones
git log --oneline # Muestra el historial en formato conciso, una línea por confirmación
git log --oneline --graph # Visualiza el historial con un gráfico de ramas y fusiones
git reflog # Muestra el historial de operaciones realizadas en el repositorio
git reflog -<n> # Muestra las últimas N operaciones
</n></n>
Retroceso a Versiones Anteriores:
git log --oneline -<n> # Identifica el ID de confirmación para retroceder
git reflog # Identifica el punto en el historial para avanzar hacia el futuro
git reset --hard <id-confirmaci> # Retrocede el repositorio a una versión específica, descartando todos los cambios locales
git reset --keep <id-confirmaci> # Retrocede a una versión, pero conserva los cambios no confirmados en el directorio de trabajo
git reset --keep HEAD^ # Retrocede a la confirmación anterior; HEAD~N para retroceder N confirmaciones
</id-confirmaci></id-confirmaci></n>
Operaciones con Repositorios Remotos:
git clone <url-repositorio-remoto> # Clona un repositorio remoto
git fetch # Descarga nuevas ramas y etiquetas del repositorio remoto (sin eliminar ramas remotas eliminadas)
git fetch --prune # Sincroniza la eliminación de ramas remotas en el repositorio local
git pull # Descarga y fusiona los cambios del repositorio remoto (equivalente a git fetch seguido de git merge)
git pull --rebase <repositorio-remoto> # Descarga los cambios y los aplica mediante rebase, integrando modificaciones sobre la base de trabajo de otros
git push -u origin <nombre-rama> # Envía una nueva rama local al repositorio remoto y establece la conexión para futuros envíos
git push origin <nombre-rama> # Envía los cambios locales de una rama al repositorio remoto
git push --set-upstream origin <nombre-rama> # Configura el seguimiento entre una rama local y una remota
git remote # Lista los repositorios remotos configurados
git remote -v # Muestra URLs de los repositorios remotos, incluyendo permisos de acceso
</nombre-rama></nombre-rama></nombre-rama></repositorio-remoto></url-repositorio-remoto>
Administración de Ramas:
Las estrategias de ramificación definen cómo crear, fusionar y eliminar ramas según el flujo de trabajo del proyecto. Antes de crear una rama, verifique el estado con git status. Al fusionar, considere usar el modo fast-forward o deshabilitarlo para mantener un historial claro.
git branch # Lista las ramas locales, con un asterisco en la rama activa
git branch -a # Muestra todas las ramas, tanto locales como remotas
git branch -r # Lista solo las ramas remotas
git branch <nombre-rama> # Crea una nueva rama
git checkout <nombre-rama> # Cambia a una rama existente
git checkout -b <nombre-rama> # Crea y cambia a una nueva rama
git checkout -b <rama> <etiqueta> # Crea una rama basada en una etiqueta específica
git cherry-pick <id-confirmaci> # Aplica una confirmación específica a la rama actual
git merge <nombre-rama> # Fusiona la rama especificada en la rama actual
git merge --no-ff -m "<comentarios>" <nombre-rama> # Fusiona una rama sin fast-forward, creando una confirmación de fusión explícita
git branch -d <nombre-rama> # Elimina una rama local si ya está fusionada
git branch -D <nombre-rama> # Elimina forzosamente una rama local, incluso si no está fusionada
git push origin --delete <nombre-rama-remota> # Elimina una rama del repositorio remoto
git log --oneline --graph # Visualiza el historial de fusiones con un gráfico
</nombre-rama-remota></nombre-rama></nombre-rama></nombre-rama></comentarios></nombre-rama></id-confirmaci></etiqueta></rama></nombre-rama></nombre-rama></nombre-rama>
Gestión de Etiquetas (Tags):
git tag # Lista todas las etiquetas locales
git ls-remote --tags # Muestra las etiquetas en el repositorio remoto
git show <etiqueta> # Muestra detalles de una etiqueta específica
git checkout <etiqueta> # Cambia al estado de una etiqueta
git tag <etiqueta> # Crea una etiqueta en la confirmación actual
git tag -a <etiqueta> -m "<comentarios>" # Crea una etiqueta anotada con un mensaje
git tag -a <etiqueta> <id-confirmaci> -m "<comentarios>" # Crea una etiqueta en una confirmación específica
git tag -d <etiqueta> # Elimina una etiqueta local
git push origin :refs/tags/<etiqueta> # Elimina una etiqueta del repositorio remoto
git push origin --tags # Envía todas las etiquetas al repositorio remoto
git push origin <etiqueta> # Envía una etiqueta específica al repositorio remoto
</etiqueta></etiqueta></etiqueta></comentarios></id-confirmaci></etiqueta></comentarios></etiqueta></etiqueta></etiqueta></etiqueta>
Simulación de Comandos (Dry Run):
git clean -n/--dry-run # Previsualiza archivos que serían eliminados
git add -n/--dry-run # Previsualiza archivos que serían añadidos al área de staging
git rm -n/--dry-run # Previsualiza archivos que serían eliminados del seguimiento
# Simular una fusión:
git merge --no-commit --no-ff <rama>
git diff --cached # Revisar los cambios que se aplicarían
git merge --abort # Cancelar la fusión simulada
</rama>
Recursos de Ayuda y Aprendizaje:
- Acceder a la guía de ayuda:
git help --guide - Listar comandos disponibles y conceptos:
git help -aogit help -g - Visualizar el tutorial general en el navegador:
git help git - Consultar ayuda para un comando o concepto específico:
git help <comando></comando>ogit help <concepto></concepto>