Tabla de Contenidos
Git - Flujo de trabajo
Comandos organizados según el uso habitual: configuración, ramas, clones, diferencias, fusión, sincronización remota y resolución de conflictos.
Configuración inicial
- Muestra la versión de Git instalada.
git --version
- Inicializa un repositorio nuevo en el directorio actual.
git init
- Configura un directorio como seguro (evita el error
detected dubious ownershipen entornos como /var/www).
git config --global --add safe.directory /var/www/btrainer
- Inicia Git Flow (estructura de ramas feature/develop/master/release/hotfix).
git flow init
Estado y seguimiento
- Muestra el estado actual del working directory y staging area.
git status
- Añade todos los cambios (nuevos, modificados y eliminados) al área de staging.
git add .
- Guarda los cambios en staging con un mensaje descriptivo.
git commit -m "Carga inicial"
Gestión de ramas
- Lista las ramas locales (la actual con asterisco).
git branch
- Lista todas las ramas (locales y remotas).
git branch -a
- Crea una nueva rama llamada
arwen-estado.
git branch arwen-estado
- Crea una rama de respaldo antes de una fusión peligrosa.
git branch backup/master-pre-fusion
- Elimina una rama local (solo si ya está fusionada).
git branch -d arwen-estado
- Muestra la ayuda del comando branch.
git branch -h
- Cambia a la rama develop.
git checkout develop
- Cambia a la rama master.
git checkout master
Clonación y copias remotas
- Clona un repositorio local a una máquina remota vía SSH (sin –bare: directorio de trabajo completo).
git clone /home/luis/Dropbox/Proyectos/btrainer ssh://ubuntu@boromir/home/ubuntu/Proyectos/btrainer
- Clona desde el directorio actual a remoto (dos formas equivalentes).
git clone . ssh://ubuntu@boromir/Proyectos/btrainer
git clone . ubuntu@boromir/Proyectos/btrainer
- Clona un repositorio bare (solo el historial, sin working directory). Útil para servidores centrales.
git clone --bare . ssh://ubuntu@boromir/Proyectos/btrainer
git clone --bare /home/luis/Dropbox/Proyectos/btrainer ssh://ubuntu@boromir/home/ubuntu/Proyectos/btrainer
Gestión de remotos
- Muestra los remotos configurados con sus URLs.
git remote -v
- Añade un remoto llamado 'boromir'.
git remote add boromir ssh://ubuntu@boromir:/home/ubuntu/Proyectos/btrainer
- Obtiene la URL del remoto 'boromir'.
git remote get-url boromir
- Elimina el remoto 'boromir'.
git remote remove boromir
Sincronización con remotos
- Descarga cambios del remoto 'boromir' sin fusionarlos (dry-run primero para previsualizar).
git fetch --dry-run boromir
git fetch boromir
- Descarga y fusiona cambios del remoto (pull completo).
git pull
- Pull forzando la fusión de historiales no relacionados (ej. dos repos independientes).
git pull boromir master --no-rebase --allow-unrelated-histories
- Prueba de envío (dry-run) antes de hacer push.
git push --dry-run boromir master
- Envía la rama master al remoto 'boromir'.
git push boromir master
- Envía con sobreescritura forzada (peligro: reescribe historia remota).
git push boromir master --force
- Versión verbosa del push forzado (muestra más detalles).
git -v push boromir master --force
git --verbose push boromir master --force
- Resetea el remoto de forma remota vía SSH (fuerza el HEAD en el servidor sin hacer clone).
ssh ubuntu@boromir "cd /home/ubuntu/Proyectos/btrainer && git reset --hard HEAD"
Comparaciones y diferencias
Diferencias básicas
- Muestra cambios sin stage (working directory vs staging).
git diff
- Muestra cambios concretos en un archivo.
git diff st.py
git diff templates/client3_rutina.html
- Muestra diferencias en un directorio completo.
git diff templates/
Diferencias entre ramas
- Diferencia entre master y develop con formato estadístico.
git diff --stat develop master | less
git diff --dirstat master develop | less
- Muestra solo nombres de archivos que difieren.
git diff --name-only
git diff --name-only master develop | less
- Muestra nombres + estado (A=added, M=modified, D=deleted).
git diff --name-status master develop | less
- Muestra estadísticas numéricas (líneas añadidas/eliminadas).
git diff --numstat develop master | less
- Ignora cambios de espacios en blanco (-w) y sin contexto (-U0).
git diff -w master develop | less
git diff -w -U0 master develop | less
- Versión resumida (solo total de líneas cambiadas).
git diff --shortstat develop master | less
- Formato raw (máximo detalle, útil para scripts).
git diff --raw master develop | less
- Diferencia entre ramas específicas (master vs arwen-estado).
git diff --stat master arwen-estado
Diferencias con el área de staging
- Muestra archivos en staging que están a punto de committearse.
git diff --cached --stat
- Archivos nuevos (solo los añadidos).
git diff --cached --name-only --diff-filter=A
- Diferencia de un archivo específico en staging.
git diff --cached Pipfile
git diff --cached st.py
- Diferencia de un binario o archivo especial (ej. SVG).
git diff --cached static/css/fonts/icomoon.svg
Historial y logs
- Muestra el historial completo.
git log
- Muestra ayuda del comando log.
git log -h
- Log con referencias decoradas (ramas, tags).
git log --decorate
- Log de una rama específica.
git log develop
- Formato compacto (una línea por commit) con grafo ASCII.
git log --oneline --graph --all
- Combinación completa: oneline + graph + all + decorate.
git log --oneline --graph --all --decorate
- Versión con decoración y grafo (similar al anterior pero más detallado).
git log --decorate --all --graph
- Describe el commit actual (tag más cercano + distancia + hash).
git describe
Fusiones (merge)
- Fusiona develop en la rama actual.
git merge develop
- Fusiona master en la rama actual.
git merge master
Resolución de conflictos
- Mantiene la versión local (ours) en conflicto.
git checkout --ours st.py
- Mantiene la versión remota (theirs) en conflicto.
git checkout --theirs st.py
Notas importantes
–forceen push reescribe la historia remota. Usar con precaución en ramas compartidas.git reset –harden remoto vía SSH es destructivo localmente en el servidor.git pull –no-rebase –allow-unrelated-historieses útil para unir dos repositorios independientes.- El flag
-wen diff ignora cambios de espacios/blancos, ideal para limpiar ruido visual.