Tabla de Contenidos

01 - Control de versiones con Git

El control de versiones registra los cambios de un proyecto a lo largo del tiempo, permite volver a estados anteriores y trabajar en equipo sin sobrescribir el trabajo de los demás. Git es el sistema de control de versiones más usado.

1. Conceptos

Concepto Significado
Repositorio Carpeta con el historial completo de versiones del proyecto
Commit Instantánea del proyecto en un momento dado, con su mensaje
Historial Cadena de commits del repositorio
Rama Línea de trabajo independiente dentro del repositorio
Remoto Copia del repositorio en otro servidor, por ejemplo GitHub

Un repositorio Git tiene tres zonas: el directorio de trabajo (los archivos que editas), el staging area (los cambios preparados) y el historial (los commits). Un commit registra lo que hay preparado en el staging area.

2. Configuración inicial

git config --global user.name "Nombre"
git config --global user.email "correo@example.com"

El nombre y el correo quedan asociados a cada commit.

3. Flujo básico

Comando Acción
git init Crea un repositorio en la carpeta actual
git clone <url> Descarga un repositorio remoto
git status Muestra el estado de los archivos
git add <archivo> Prepara archivos para el commit (staging)
git commit -m “mensaje” Guarda una versión con su mensaje
git log –oneline Muestra el historial resumido
git diff Muestra los cambios sin preparar

git init
git add .
git commit -m "Initial commit"
git status

4. Ramas

Una rama permite trabajar en una funcionalidad sin afectar al código principal. La rama principal suele llamarse main.

git branch feature/login      # crea la rama
git switch feature/login      # cambia a ella
# ... commits ...
git switch main
git merge feature/login       # incorpora los cambios


@startuml
gitbranch
commit id: "A"
commit id: "B"
branch feature
commit id: "C"
commit id: "D"
merge feature
commit id: "E"
@enduml

5. Conflictos

Un conflicto ocurre cuando dos ramas modifican las mismas líneas y Git no puede decidir cuál conservar. El archivo marcado muestra ambas versiones delimitadas por «««<, ======= y »»»>.

<<<<<<< HEAD
Versión de la rama actual
=======
Versión de la rama que se fusiona
>>>>>>> feature/login

Resolverlo consiste en editar el archivo, dejar la versión correcta y repetir git add con git commit. Fusionar con frecuencia reduce los conflictos.

6. Remotos

git remote add origin <url>   # conecta con un remoto
git push -u origin main       # publica la rama
git push                      # publica los últimos commits
git pull                      # descarga e integra los cambios del remoto
git fetch                     # descarga sin integrar

7. GitHub

GitHub aloja repositorios y facilita la colaboración:

8. .gitignore

El archivo .gitignore lista patrones que Git debe ignorar: compilados, dependencias, configuración local o secretos.

target/
.idea/
*.log
application-local.properties

Nunca se versionan claves, contraseñas ni datos de acceso.

Commits pequeños y frecuentes con mensajes descriptivos mantienen un historial útil. Un mensaje de commit explica el cambio: “Add validation to registration form” es útil; “cambios” no.