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
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:
- Pull request (PR): propuesta para integrar una rama en otra, con revisión de cambios y comentarios.
- Fork: copia del repositorio en la cuenta de otra persona, útil para contribuir sin permisos de escritura.
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.