D
Colaboracion M15 introductorio 10 min

Capitulo 05

Git y Control de Versiones para Analistas

Transversal a toda oferta tecnica: barato de cerrar, caro de no tenerlo

El flujo basico de Git, branching, Pull Requests y resolucion de conflictos en la practica — la base que se espera en cualquier rol tecnico.

Solo 9% lo menciona explicito, pero es la trampa mas barata de resolver

Deloitte lo pidio para un rol de “Data Analyst” — no solo para desarrolladores. Si hoy no tienes un flujo comodo con branches, Pull Requests y resolucion de conflictos, es el gap mas rapido de cerrar de todo este curso.

5.1 El flujo basico

bash flujo_basico_git.sh
git init                          # inicializa un repositorio
git add archivo.sql               # agrega un archivo al staging area
git commit -m "Agrega query de ventas mensuales"
git remote add origin <url>       # conecta con un repositorio remoto (GitHub)
git push -u origin main           # sube los commits al remoto
git pull                          # trae cambios nuevos del remoto

5.2 Branching: trabajar en paralelo sin pisarse

Feature Branch

M15

Rama de Git creada para desarrollar una funcionalidad o cambio especifico de forma aislada del branch principal, evitando que trabajo incompleto rompa lo que ya funciona.

#git
bash feature_branch.sh
git checkout -b feature/reporte-mensual   # crea y cambia a un nuevo branch
# ... trabajas, haces commits ...
git push -u origin feature/reporte-mensual
# Se abre un Pull Request en GitHub/GitLab desde ese branch hacia main
Por que un branch y no trabajar directo en main

Trabajar directo sobre main funciona solo mientras trabajas solo y nunca cometes un error a medio terminar. En cuanto hay mas de una persona (o tú mismo revisando el trabajo de otro dia), un cambio incompleto en main bloquea a todos los demas. Un feature branch aisla tu trabajo en progreso hasta que este listo y revisado — el costo de crear un branch es un comando; el costo de NO usarlo es un main roto para todo el equipo.

Caso real: Data Analyst pedido con Git explicito

Deloitte pidio Git explicitamente para un rol de “Data Analyst” en la muestra de mercado — no un rol de desarrollo. En la practica, esto suele significar: cada script SQL/Python de reporting vive en un repo, cada cambio pasa por un branch + Pull Request antes de tocar el reporte que usa el negocio, y el historial de commits sirve como bitacora de “por que cambio este numero” cuando alguien pregunta 6 meses despues.

1. Un solo branch gigante con semanas de cambios acumulados
✗ Trabajar 3 semanas en un branch sin hacer push ni abrir PR, acumulando cambios que se vuelven imposibles de revisar.
✓ Branches chicos y de vida corta (dias, no semanas), con PRs frecuentes que alguien puede revisar en minutos, no horas.

5.3 Merge vs Rebase

Merge vs Rebase

M15

Merge integra los cambios de un branch a otro preservando el historial completo con un commit de fusion. Rebase reescribe el historial del branch, aplicando sus commits como si hubieran partido desde el estado actual del branch destino — produce un historial lineal, pero reescribe commits ya existentes.

#git
ConceptoDescripcion
merge Preserva el historial exacto de ambos branches, incluyendo un commit de fusion. Mas seguro para branches compartidos por varias personas.
rebase Reescribe el historial para que parezca lineal, sin commit de fusion. Nunca hacer rebase de un branch que otros ya tienen descargado.

5.4 Pull Requests: donde pasa la revision de codigo

Pull Request (PR)

M15

Solicitud formal para fusionar los cambios de un branch a otro (tipicamente hacia main), que habilita revision de codigo, comentarios y discusion antes de aceptar el cambio.

#git #colaboracion

Un buen PR: tiene un titulo y descripcion claros de QUE cambia y POR QUE, es pequeño y enfocado (mas facil de revisar), y pasa cualquier chequeo automatico configurado (linting, tests) antes de poder fusionarse.

Caso real: revision de un cambio en una query de reporting

Un PR que cambia la logica de un query de comisiones (“ahora excluir devoluciones del calculo”) deberia mostrar en su descripcion QUE regla de negocio cambio y POR QUE (ej. “pedido de Finanzas, ticket JIRA-123”), no solo el diff del SQL. Eso permite que quien revisa juzgue si la regla de negocio es correcta, no solo si el SQL es sintacticamente valido.

1. Un PR de 40 archivos sin descripcion
✗ Abrir un PR gigante con titulo 'cambios' y sin contexto, esperando que el revisor adivine que se cambio y por que.
✓ PRs chicos y enfocados en un solo cambio logico, con descripcion que explique el contexto de negocio del cambio.

5.5 Resolver un conflicto de merge, en la practica

No le tengas miedo al conflicto

Un conflicto de merge NO es un error — es Git avisandote que dos cambios tocaron la misma linea y necesita que decidas cual (o ambos) conservar. Git marca el archivo con marcadores <<<<<<< / ======= / >>>>>>>: editas el archivo para dejarlo como deberia quedar, eliminas los marcadores, y haces git add + git commit para cerrar el conflicto.

text ejemplo_conflicto.sql
<<<<<<< HEAD
SELECT cliente_id, SUM(monto) AS total FROM ventas GROUP BY cliente_id;
=======
SELECT cliente_id, region, SUM(monto) AS total FROM ventas GROUP BY cliente_id, region;
>>>>>>> feature/agregar-region

Aqui, la decision correcta suele ser quedarse con la version que agrega region (mas completa) — pero eso depende del contexto de negocio, que solo tú sabes al mirar el conflicto.

5.6 .gitignore y mensajes de commit

Un .gitignore evita subir archivos que no deberian versionarse: credenciales, archivos temporales, entornos virtuales, salidas de build. Un buen mensaje de commit describe el “por que”, no repite el diff: "Corrige duplicados en carga incremental de ventas" es mejor que "fix".

5.7 Recursos

Curso: GitHub Skills: "Introduction to GitHub" (interactivo, gratuito)
Articulo: Atlassian Git Tutorial: Merging vs Rebasing (explicacion visual clara)
Herramienta: Oh Shit, Git!?! (guia informal para resolver los errores mas comunes de Git)

5.8 Preguntas de entrevista

Q: Dos personas editaron el mismo archivo y ahora tienes un conflicto de merge. ¿Que haces?

Abro el archivo con conflicto, identifico los bloques marcados por Git (<<<<<<<, =======, >>>>>>>), decido con criterio de negocio (no solo tecnico) que version conservar o si hay que combinar ambas, elimino los marcadores, y hago git add + git commit para cerrar el conflicto. Si no estoy seguro del contexto del otro cambio, hablo con quien lo hizo antes de decidir.

🪤 Responder 'uso git merge --abort y descarto' como solucion general — eso evita el conflicto, no lo resuelve.
Practica: provoca y resuelve un conflicto real introductorio
  1. Crea un repositorio local con un archivo de texto simple.
  2. Crea dos branches distintos que editen la MISMA linea de ese archivo de formas diferentes.
  3. Intenta hacer merge de ambos hacia main y deja que Git marque el conflicto.
  4. Resuelvelo manualmente y documenta en un archivo aparte cada paso que seguiste.