1. Introducción y motivación
Cuando escribes código o trabajas en un proyecto, es fundamental poder seguir los cambios y volver a una versión anterior cuando haga falta. ¡Ahí es donde entra Git!
Explicación: Analogía del mundo real
Git es como guardar copias de seguridad de un documento de Word con «Guardar como» en cada paso. ¡Pero mucho más inteligente y automático!
2. ¿Qué es Git y por qué lo usamos?
Explicación: ¿Por qué Git?
Git es un sistema de control de versiones que registra paso a paso el historial de tus archivos y de tu código. Esto te permite gestionar con seguridad tanto tus propios cambios como las contribuciones de tus compañeros.
- Deshacer: ¿Cometiste un error en tus cambios? Con Git puedes restaurar fácilmente estados anteriores.
- Trabajo en equipo: Varias personas pueden trabajar en el mismo proyecto sin pisarse unas a otras.
- Experimentación y confianza: Puedes probar una funcionalidad nueva sin romper el código base principal.
3. Instalación de Git y configuración inicial
- Descarga Git e instálalo para tu sistema operativo.
- Después de instalarlo, compruébalo ejecutando
git --versionen tu terminal. - Configura tu nombre de usuario y tu email:
Bash
git config --global user.name "Adınız Soyadınız" git config --global user.email "[email protected]"
4. Conceptos básicos: Commit, Branch, Staging, HEAD, DAG
Explicación: ¿Cómo funciona Git?
Git toma una «instantánea» de tus archivos con cada cambio. Esas instantáneas se llaman commits y están enlazadas entre sí como una cadena. Esa cadena forma el historial de tu proyecto.
- Staging Area (Index): La zona donde preparas tus cambios antes de hacer commit.
- Commit: Un registro del estado de tu proyecto en un momento dado.
- Branch: Te permite abrir distintos caminos de desarrollo. La rama principal suele ser
mainomaster. - HEAD: Apunta a la rama en la que estás trabajando actualmente.
- DAG (Directed Acyclic Graph, grafo acíclico dirigido): Los commits se enlazan entre sí en una estructura de grafo dirigido y acíclico.
Explicación: Analogía del mundo real
El staging area es como tu carrito de la compra. Lo que metes en el carrito se incluye en el commit; lo que dejas fuera se queda en la estantería.
5. Comandos básicos de Git: primeros pasos
Crear un repositorio Git nuevo
git initConvierte la carpeta actual en un proyecto Git.
Seguimiento de cambios
git statusMuestra los archivos modificados en tu directorio de trabajo y los archivos que están en staging.
Añadir archivos (staging)
git add dosya.txtAñade un archivo concreto. Para todos los archivos:
git add .Guardar cambios (commit)
git commit -m "Açıklama yazın"Registra tus cambios de forma permanente.
Ver el historial
git logMuestra la lista completa del historial de commits.
6. Ramas y estrategias de branching
- Rama principal (main/master): Código siempre estable y listo para producción.
- Feature Branch: Se crea para funcionalidades nuevas y se fusiona con la rama principal cuando está terminada.
- Hotfix/Release Branch: Se usa para correcciones urgentes de errores o para preparar una versión.
Explicación: ¿Por qué usar ramas?
Para desarrollar varias funcionalidades o correcciones a la vez sin que interfieran entre sí.
Estrategias de branching populares
- Git Flow: Usa las ramas main, develop, feature, release y hotfix para proyectos complejos.
- GitHub Flow: Un flujo de trabajo sencillo basado en la rama main y en ramas feature de corta duración.
7. Trabajar con repositorios remotos y GitHub
- Repositorio remoto (Remote): Una copia alojada en plataformas como GitHub o GitLab.
- Añadir un repositorio remoto:
Bash
git remote add origin <repo-adresi> git push -u origin main - Traer los últimos cambios de un repositorio remoto:
Bash
git pull - Clonar un proyecto existente en tu ordenador:
Bash
git clone <repo-adresi>
8. Otros comandos de uso frecuente
git branch: Lista las ramas existentes.git checkout -b yeni-ozellik: Crea una rama nueva y cambia a ella.git merge <dal>: Fusiona la rama indicada con la rama actual.
9. Merge vs Rebase, conflictos y resoluciones
¿Cómo se produce un conflicto de merge? (escenario y ejemplo)
Escenario: Dos personas hacen cambios distintos en exactamente la misma línea de un archivo.
- Existe un archivo en la rama main:
txt
mesaj.txt: Merhaba dünya! - En la rama
feature-a, se modifica esta línea:txtmesaj.txt: Merhaba Copilot! - En la rama
feature-b, se modifica la misma línea de otra manera:txtmesaj.txt: Merhaba insan! - Primero se fusiona
feature-acon la rama main. Después se intenta fusionarfeature-bcon main. Como hay dos cambios en conflicto en la misma línea, Git lanza un conflicto de merge.
Explicación: Analogía del mundo real
Si dos personas editan de forma distinta exactamente la misma frase de un documento de Word, alguien tiene que decidir qué versión es la correcta. Git te pide que tomes esa decisión.
Comandos de merge/rebase y resolución de conflictos
Merge
git merge feature-branchFusiona dos ramas. Conserva el historial de commits completo.
Rebase
git rebase mainMueve tu rama a la punta de la rama main, lo que da un historial lineal más limpio.
Conflictos de merge/rebase
- Cuando se produce un conflicto, aparecen en el archivo los marcadores
<<<<<<<,=======y>>>>>>>. - Resuelve manualmente las líneas en conflicto y luego ejecuta:
Bash
git add <dosya> git commit - No puedes completar un commit hasta que se resuelvan los conflictos.
Advertencia: Error común
Ejecutar git add . y git commit sin resolver los marcadores de conflicto puede llevar código roto a la rama principal.
10. Errores comunes y cómo recuperarse (en detalle)
1. Hacer commit en la rama equivocada
Escenario: Creías que estabas trabajando en una feature branch, pero hiciste commit directamente en main (o al revés).
Solución:
- Busca el hash del commit:
Bash
git log --oneline - Cambia a la rama de destino:
Bash
git checkout main - Aplica el commit a la rama principal:
Bash
git cherry-pick <commit-hash> - Elimina el commit de la rama equivocada:
Bash
git checkout feature git reset --hard HEAD~1
Consejo: Consejo pro
Con git cherry-pick puedes elegir cualquier commit concreto y aplicarlo a otra rama.
2. Eliminar un commit por accidente
Escenario: Se perdió un commit durante un git reset --hard o una operación de rebase.
Solución:
- Busca el hash del commit:
Bash
git reflog - Recupera el commit perdido en una rama nueva:
Bash
git checkout -b kurtarma <commit-hash>
Consejo: Consejo de depuración
git reflog registra casi todas las acciones que realizas en tu repositorio local. No te asustes: ¡la mayoría de los commits perdidos se pueden recuperar!
3. Falta un commit después de un merge o rebase
Escenario: Algunos commits desaparecieron después de un merge o rebase.
Solución:
- Encuentra el hash del commit con
git reflog. - Recupera el commit creando una rama nueva:
Bash
git branch kayip-commit <commit-hash> - Si hace falta, fusiónalo de nuevo o aplícalo con cherry-pick en tu rama de destino.
4. Eliminar un archivo por accidente
Escenario: Borraste un archivo y quieres restaurarlo antes de hacer commit.
Solución:
- Para restaurarlo al estado que tenía en el último commit:
Bash
git checkout HEAD -- dosya.txt - Para restaurarlo desde un commit anterior:
Bash
git checkout <commit-hash> -- dosya.txt
5. No poder resolver un conflicto de merge
Escenario: Borraste por accidente los marcadores de conflicto (<<<<<<<, =======, >>>>>>>) y corrompiste el archivo.
Solución:
- Para restablecer el archivo y resolver el conflicto desde cero:
Bash
git checkout --ours dosya.txt # Keeps your changes git checkout --theirs dosya.txt # Keeps incoming changes - Después puedes retomar el proceso de merge.
Nota: Motivación
En Git se cometen errores todo el tiempo. Lo importante es no entrar en pánico y solucionarlo paso a paso. ¡Haz de git status, git log y git reflog tus mejores amigos!
Errores comunes y métodos de recuperación (tabla resumen)
| Error | Método de recuperación |
|---|---|
| Commit en la rama equivocada | git cherry-pick, git reset |
| Commit eliminado | git reflog, rama nueva |
| Falta un commit tras un merge/rebase | git reflog, git branch |
| Archivo eliminado por accidente | git checkout |
| No se puede resolver un conflicto de merge | git checkout --ours/theirs |
11. Escenarios reales y colaboración en equipo
- Fork y PR: Hacer un fork del proyecto de otra persona y enviar un pull request con tus cambios.
- Upstream Sync: Traer las actualizaciones del repositorio original para mantener tu fork al día.
- Code Review: Revisar los cambios de código mediante PR antes de fusionarlos.
Consejo: Consejo pro
Cuando trabajes en equipo, desarrolla cada funcionalidad en una rama separada y fusiónala con la rama principal mediante un PR.
12. Temas avanzados
Squash
Escenario: Hiciste 5 commits pequeños en una feature branch, pero quieres fusionarlos con la rama principal como un único commit.
Ejemplo detallado:
- La rama
feature/logintiene los siguientes commits:feat: kullanıcı adı inputu eklendifix: input typo düzeltildifeat: şifre inputu eklendifix: şifre inputu typo düzeltildistyle: inputlara margin eklendi
- Antes de fusionar con
main, quieres combinarlos en un solo commit:Bashgit checkout feature/login git rebase -i HEAD~5 - En el editor interactivo, deja el primer commit como
picky cambia los demás asquash. Edita el mensaje del commit y guarda. - Resultado: Todos los cambios se combinan en un único commit. Ahora puedes fusionar con
main.
Consejo
Hacer squash mantiene el historial de commits limpio y legible.
Cherry-pick
Escenario: Quieres elegir un commit concreto de otra rama y aplicarlo a tu rama actual.
Ejemplo detallado:
- Se hizo commit de una corrección urgente en
hotfix/bugfix:fix: login bug düzeltildi(hash del commit:a1b2c3d)
- Estás trabajando en
feature/profiley quieres aplicar esta corrección:Bashgit checkout feature/profile git cherry-pick a1b2c3d - Resultado: Solo ese commit concreto se aplica a tu rama actual. Tu código queda actualizado.
Consejo
Es muy útil cuando necesitas llevar una corrección urgente a distintas ramas.
Revert
Escenario: Creaste un commit incorrecto en la rama principal, pero no quieres reescribir el historial.
Ejemplo detallado:
- Se eliminó un archivo por error en
main:commit hash: d4e5f6g
- Para deshacer este commit:
Bash
git checkout main git revert d4e5f6g - Resultado: El archivo eliminado se restaura y se crea un nuevo commit de revert.
Consejo
Revert deshace de forma segura los cambios defectuosos sin alterar el historial existente.
Reset
Escenario: Hiciste 3 commits innecesarios y quieres eliminarlos por completo.
Ejemplo detallado:
- Commits recientes:
fix: typotest: test kodudebug: console.log eklendi
- Para borrar los últimos 3 commits:
Bash
git reset --hard HEAD~3 - Resultado: El repositorio vuelve al estado de hace 3 commits. Esos commits y cambios se descartan por completo.
Advertencia
reset --hard es destructivo y no se puede deshacer fácilmente. ¡No lo uses nunca en ramas públicas compartidas!
Reflog
Escenario: Eliminaste por accidente una rama o un commit y quieres recuperarlo.
Ejemplo detallado:
- Un commit desapareció tras ejecutar
git reset --hard. - Para localizar el commit perdido:
Bash
git reflog # Find the old commit hash in the output (e.g. 9z8y7x6) git checkout -b kurtarma 9z8y7x6 - Resultado: El commit perdido se restaura en una rama nueva.
Consejo
Reflog registra casi todas las acciones que realizas en Git. ¡No entres en pánico!
Stash
Escenario: Necesitas cambiar de rama con urgencia mientras trabajas, pero no quieres hacer commit de un trabajo sin terminar.
Ejemplo detallado:
- Estás en
feature/searchcon cambios sin commitear. - Necesitas cambiar a la rama principal:
Bash
git stash git checkout main # Once done, switch back to your feature branch git checkout feature/search git stash pop - Resultado: Tus cambios se restauran de forma segura sin perder nada de trabajo.
Consejo
Stash es ideal para cambiar de rama sin hacer commit de trabajo incompleto.
.gitignore y .gitattributes
Escenario: Tu proyecto contiene archivos que no deberían rastrearse, como la salida del build o claves secretas.
Ejemplo detallado:
- Tienes carpetas o archivos como
node_modules/,.envodist/. - Añádelos a tu archivo
.gitignore:txtnode_modules/ .env dist/ - Resultado: Git ignorará estos archivos.
- Usa
.gitattributespara configurar los finales de línea, por ejemplo:txt* text=auto
Consejo
.gitignore evita que archivos innecesarios o sensibles entren en tu repositorio.
Hooks
Escenario: Quieres ejecutar pruebas automáticas antes de cada commit.
Ejemplo detallado:
- Abre o crea
.git/hooks/pre-commit. - Añade el siguiente script:
Bash
#!/bin/sh npm test - Haz el archivo ejecutable:
Bash
chmod +x .git/hooks/pre-commit - Resultado: Las pruebas automáticas se ejecutan antes de cada commit; si fallan, el commit se cancela.
Consejo
Los hooks ayudan a imponer automáticamente la calidad del código en tu repositorio.
Submodules
Escenario: Quieres incluir otro repositorio Git (por ejemplo, una librería compartida) como submódulo en tu proyecto.
Ejemplo detallado:
- Para añadir una librería compartida:
Bash
git submodule add https://github.com/ornek/ortak-kutuphane.git libs/ortak-kutuphane - Para actualizar el submódulo:
Bash
git submodule update --remote - Resultado: El submódulo queda integrado en tu proyecto y se mantiene actualizado.
Consejo
Los submódulos son ideales para compartir código común entre varios repositorios.
Shallow Clone y LFS
Escenario 1: Un repositorio es muy grande y solo quieres descargar rápidamente la última instantánea.
Ejemplo detallado:
- Para clonar solo el último commit:
Bash
git clone --depth=1 https://github.com/ornek/buyuk-repo.git - Resultado: Solo se descarga la última revisión en lugar de todo el historial.
Escenario 2: Tu repositorio contiene archivos grandes (por ejemplo, vídeos o datasets) que ralentizan Git.
Ejemplo detallado:
- Configura Git LFS:
Bash
git lfs install git lfs track "*.mp4" git add .gitattributes git add video.mp4 git commit -m "LFS ile video eklendi" - Resultado: LFS gestiona los archivos grandes y tu repositorio principal sigue siendo rápido.
Consejo
LFS mejora el rendimiento en proyectos que manejan grandes recursos binarios.
13. Preguntas frecuentes y recursos
Preguntas frecuentes
Nota: Preguntas avanzadas sobre Git
P: ¿Cómo puedo mantener limpio mi historial de commits? R: Usar rebase y squash en las feature branches, sobre todo cuando trabajas en equipo, mantiene el historial conciso y legible.
P: ¿Merge o rebase? R: Usa merge para conservar el contexto compartido en las ramas del equipo, y rebase en las feature branches para mantener limpio el historial local.
P: ¿Es posible borrar un commit por completo? R: Puedes editar el historial con git rebase -i o borrar commits con git reset --hard. ¡Úsalo con precaución!
P: ¿Cómo gestiono los archivos grandes? R: Puedes rastrear archivos grandes con Git LFS.
P: ¿Cómo actualizo los submódulos? R: Usa el comando git submodule update --remote.
Recursos y lecturas adicionales
Nota
¡Ya estás listo para usar Git no solo a nivel básico, sino como un profesional!
Hoja de ruta y herramienta interactivas
Desarrollador Frontend Junior 2026
Lo que realmente necesitas saber para conseguir un trabajo de frontend junior en 2026 y lo que puede esperar, a partir de ofertas reales.
¿SQL o NoSQL?
Responde seis preguntas y te diré qué tipo de base de datos encaja con tu proyecto, y por qué.
Sigue leyendo
- CZES8 sitios web gratuitos que deberías guardar en favoritos
8 sitios web gratuitos que deberías guardar en favoritos
20 de septiembre de 2026 · 1 min de lectura - CZESLa trampa de `==` y la coerción de tipos en JavaScript
La trampa de `==` y la coerción de tipos en JavaScript
17 de septiembre de 2026 · 3 min de lectura