Notas de Luis

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 ownership en 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

  • –force en push reescribe la historia remota. Usar con precaución en ramas compartidas.
  • git reset –hard en remoto vía SSH es destructivo localmente en el servidor.
  • git pull –no-rebase –allow-unrelated-histories es útil para unir dos repositorios independientes.
  • El flag -w en diff ignora cambios de espacios/blancos, ideal para limpiar ruido visual.
computing/linux/git_workflow.txt · Última modificación: por alfabeto