Tema 28: Flujos de trabajo y actualización segura
Un flujo de trabajo acuerda cómo crear cambios, revisarlos e integrarlos. En GitHub Flow se suele usar una rama principal y ramas breves para propuestas que se revisan antes de integrar. Git Flow distingue ramas de desarrollo y de preparación o mantenimiento de versiones. El desarrollo basado en tronco prioriza integraciones pequeñas y frecuentes sobre una línea principal, con ramas muy breves cuando se utilizan. No son comandos nuevos: son acuerdos de equipo.
Para colaborar necesitas actualizar tu información. git fetch origin descarga los objetos necesarios y actualiza referencias como origin/main, sin cambiar por sí solo tu rama ni tus archivos. Después puedes inspeccionar log --graph --all antes de decidir cómo integrar.
git pull combina obtención e integración. Expresa la estrategia: git pull --ff-only origin main solo admite avance directo; --no-rebase integra mediante merge; --rebase reproduce tus commits sobre el destino. Lo ejecutas desde la rama que debe recibir el trabajo. En una rama compartida evita reorganizar commits ajenos sin coordinación.
git revert <commit> crea otro commit que deshace el efecto de uno anterior, conservando el original en el historial. Es apropiado cuando necesitas cancelar un cambio ya compartido. Se diferencia de reset, que mueve una referencia y puede apartar commits de su recorrido. Esta práctica revierte un commit normal de un padre y sin conflictos; casos más complejos requieren revisar la resolución.
Si un equipo ha acordado reemplazar una historia remota reescrita, git push --force-with-lease añade una comprobación: el destino debe seguir teniendo el valor esperado según tu información local. Si alguien publicó después de tu última consulta, el envío se rechaza. Reduce un riesgo concreto; no convierte en segura cualquier reescritura ni sustituye al acuerdo del equipo. Un fetch de fondo puede actualizar esa expectativa en herramientas reales, por lo que debes entender qué estás protegiendo.
Antes de publicar: actualiza tu información, integra con una estrategia explícita, revisa el cambio y realiza las comprobaciones del proyecto. En el reto practicas fetch, un pull por avance directo y la creación de un commit inverso antes del envío. Los demás procedimientos completan el vocabulario para elegir conscientemente.
Comandos para probar #
1git fetch origin 2git log --oneline --graph --all 3git pull --ff-only origin main 4git status 5git revert HEAD 6git push origin main
Error que conviene evitar #
Confundir fetch con integración, revert con borrado del historial o force-with-lease con permiso para sobrescribir el trabajo del equipo.
Laboratorio local #
Prueba los comandos y observa qué cambia. Puedes reiniciar sin guardar una entrega. Los retos evaluables y el cuestionario están en las actividades de este tema.
Git / práctica local
Actualiza y revierte
Aplicar edición cambia el archivo; git add lo prepara.
Historial de commits
Las líneas conectan los commits con sus padres. Los commits que ya no tienen una referencia también permanecen visibles en este laboratorio.
- 0000002: Documenta avance;
- 0000001: Commit inicial; HEAD → main · origin/main
Comparar trabajo, índice y HEAD
Trabajo
# Mi proyecto
Índice (staging)
# Mi proyecto
HEAD
# Mi proyecto
TERMINAL
Sesión local preparada. Escribe help para consultar los comandos de este tema.
Comandos disponibles y límites
git --version · git config --global <clave> [valor] git init · git status git add <archivo | .> · git commit -m "mensaje" · git log git log --oneline · git switch <rama> (antes: checkout) git restore [--staged] <archivo> · git commit --amend [-m "mensaje" | --no-edit] git switch --detach <commit> · HEAD · HEAD~1 git diff [--staged | <commit> <commit>] git remote [-v] · git remote add <nombre> <URL> · git remote get-url <nombre> · git remote set-url <nombre> <URL> git clone <URL> git push [-u] <remoto> <rama> ssh-keygen -t ed25519 · ssh -T git@github.com (ficticios) git branch [nombre] · git branch -m <nombre> · git branch -d <rama> · git switch -c <rama> git merge [--ff-only] <rama> git merge --no-ff <rama> · git log --graph --all --decorate git merge --abort · editar conflicto, git add y git commit -m "mensaje" git config --global alias.st status · git st git tag [nombre] · git tag -a <nombre> -m "mensaje" · git tag -n · git push origin <tag> git reset --soft|--mixed|--hard <commit> · git reflog git stash push [-u] [-m "mensaje"] · list · show · apply · pop · drop git rebase <rama> · git rebase --continue · git rebase --abort git grep [-n] <texto> [revisión] git rebase -i <base> (editar lista) · git merge --squash <rama> git bisect start · good [commit] · bad [commit] · reset git fetch <remoto> · git pull --ff-only|--rebase|--no-rebase · git revert <commit> · git push --force-with-lease help · clear
Sesión en memoria: recargar descarta la práctica. Doscientas acciones como máximo. Dos archivos editables de hasta 250 líneas. Diez ramas como máximo. Diez entradas de stash como máximo. El modelo no ejecuta comandos reales ni realiza conexiones externas. diff muestra contenido anterior y posterior por archivo. grep busca texto literal. La lista interactiva conserva el orden y agrupa todos los commits seleccionados.
Resumen
- Puedes inspeccionar los cambios antes de decidir.
- Se detiene si los historiales han divergido.
- Permite cancelar un cambio sin apartarlo del historial compartido.
- Confundir fetch con integración, revert con borrado del historial o force-with-lease con permiso para sobrescribir el trabajo del equipo.