Git y commits: vocabulario y mensajes en inglés
En esta lección
Git y GitHub son el lugar donde más inglés vas a escribir al programar. Los comandos son palabras inglesas (commit, push, merge), los mensajes que devuelve Git son frases inglesas y los commits que escribas serán leídos por otras personas. En esta lección aprenderás el vocabulario esencial, a leer los mensajes de Git y a escribir buenos mensajes de commit con la convención más extendida, Conventional Commits. Todas las salidas de Git que ves aquí son reales.
Si todavía no usas Git, no te preocupes: aquí aprendes los términos; la parte práctica del control de versiones la vas a poder aplicar con cualquier tutorial.
El vocabulario esencial
| Inglés | Pronunciación | Significado | Ejemplo |
|---|---|---|---|
repository (repo) | /ripósitori/, /rípo/ | repositorio: carpeta de proyecto con su historial | a repo on GitHub |
| commit | /komít/ | instantánea guardada del proyecto (sustantivo y verbo) | make a commit |
| branch | /branch/ | rama: línea de trabajo paralela | feature/login |
| main / master | /mein/, /máster/ | la rama principal | git switch main |
| merge | /merdy/ | fusionar ramas | merge a branch |
| clone | /clóun/ | clonar: copiar un repo remoto | git clone |
| fork | /fork/ | bifurcar: copia propia de un repo ajeno | fork the project |
| pull | /pul/ | traer cambios del remoto | git pull |
| push | /push/ | subir cambios al remoto | git push |
| fetch | /fech/ | descargar cambios sin aplicarlos | git fetch |
| remote | /rimóut/ | remoto: el repo en el servidor | origin |
| origin | /óridyin/ | nombre habitual del remoto | origin/main |
pull request (PR) | /pul rikuést/ | petición para integrar tus cambios | open a PR |
| issue | /íshiu/ | incidencia o tarea en GitHub | open an issue |
| conflict | /cónflikt/ | choque entre cambios | merge conflict |
| stage / staged | /steich/, /steichd/ | preparar / preparado para el commit | staged changes |
| working directory | /uérking dairéktori/ | tu carpeta de trabajo | working tree |
| HEAD | /jed/ | el commit en el que estás ahora | HEAD~1 |
| tag | /tag/ | etiqueta: marca una versión | v1.0.0 |
| diff | /dif/ | diferencias entre dos versiones | git diff |
| log | /log/ | historial de commits | git log |
| revert | /rivért/ | deshacer un commit creando otro | git revert |
| reset | /riset/ | mover la rama a un commit anterior | git reset |
| stash | /stash/ | guardar cambios a un lado temporalmente | git stash |
| rebase | /ribéis/ | reaplicar tus commits sobre otra base | git rebase |
| squash | /scuásh/ | aplastar varios commits en uno | squash commits |
| cherry-pick | /chéri pik/ | copiar un commit concreto | git cherry-pick |
| ignore | /ignór/ | ignorar archivos | .gitignore |
Un truco: el verbo commit significa “comprometerse” y por eso el commit es el compromiso de guardar un estado. Se usa como verbo (“I committed the change”, /ai komítid/) y como sustantivo (“a small commit”).
Los comandos y cómo se leen
Cada comando es una frase en imperativo: git <verbo>. Léelos así:
| Comando | Se lee | Qué hace |
|---|---|---|
git init | git init | Crea un repositorio nuevo |
git clone <url> | git clone | Copia un repositorio remoto |
git status | git status | Muestra el estado actual |
git add . | git add dot | Prepara (stage) los cambios |
git commit -m "..." | git commit dash m | Guarda los cambios con un mensaje |
git push | git push | Sube los commits al remoto |
git pull | git pull | Trae y fusiona cambios del remoto |
git switch -c name | git switch dash c name | Crea y cambia a una rama |
git merge name | git merge name | Fusiona una rama en la actual |
git log --oneline | git log dash dash oneline | Historial resumido |
El flag -m significa message (mensaje). El flag --oneline es “en una línea”.
Leer los mensajes de Git
Git responde con frases en inglés llenas de vocabulario que ya conoces. Estos son resultados reales.
git status
On branch main
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
a.txt
nothing added to commit but untracked files present (use "git add" to track)
| Frase | Traducción |
|---|---|
On branch main | Estás en la rama main |
No commits yet | Aún no hay commits |
Untracked files | Archivos sin seguimiento (Git no los conoce) |
use "git add <file>..." to include in what will be committed | usa git add para incluirlos en lo que se guardará |
nothing added to commit | no hay nada añadido para guardar |
Después de git add a.txt, el estado cambia:
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: a.txt
“Cambios que se van a guardar… (usa git rm --cached para quitarlos de la zona de preparación). Archivo nuevo: a.txt”. Unstage (/anstéich/) es quitar algo de la zona de preparación.
Estados que verás en git status: modified (modificado), new file (archivo nuevo), deleted (borrado), renamed (renombrado), untracked (sin seguimiento), staged (preparado), unstaged (no preparado).
El historial
$ git log --oneline
53b5c24 feat: add greeting file
Cada línea es un commit: una hash (/jash/, código identificador, 53b5c24) y su mensaje.
Conflictos de fusión
Un merge conflict ocurre cuando dos ramas cambian la misma parte de un archivo. Este es el resultado real al fusionar:
Auto-merging a.txt
CONFLICT (content): Merge conflict in a.txt
Automatic merge failed; fix conflicts and then commit the result.
“Fusionando automáticamente a.txt. CONFLICTO (de contenido): conflicto de fusión en a.txt. La fusión automática ha fallado; arregla los conflictos y luego haz commit del resultado.”
Y el archivo queda marcado así:
hello
<<<<<<< HEAD
main change
=======
login
>>>>>>> feature/login
Lee las marcas: entre <<<<<<< HEAD y ======= está tu versión (la rama actual, current), y entre ======= y >>>>>>> feature/login está la versión entrante (incoming). Tú decides con cuál quedarte, borras las marcas y haces git add y git commit.
Si intentas hacer commit sin resolverlos:
error: Committing is not possible because you have unmerged files.
hint: Fix them up in the work tree, and then use 'git add/rm <file>'
hint: as appropriate to mark resolution and make a commit.
“Error: no se puede hacer commit porque hay archivos sin fusionar. Pista: arréglalos en el árbol de trabajo y luego usa git add/rm…”. La palabra hint (/jint/) significa “pista”.
Otros mensajes típicos
| Mensaje | Traducción | Qué hacer |
|---|---|---|
fatal: No configured push destination. | no hay destino configurado para push | Añade un remoto con git remote add origin ... |
error: pathspec 'nada' did not match any file(s) known to git | nada no coincide con ningún archivo conocido | Revisa el nombre de la rama o archivo |
Your branch is ahead of 'origin/main' by 2 commits. | tu rama va 2 commits por delante | Haz git push |
Your branch is behind 'origin/main' | tu rama va por detrás | Haz git pull |
rejected ... (non-fast-forward) | rechazado: el remoto tiene cambios que no tienes | Haz git pull antes |
Permission denied (publickey) | permiso denegado: falla la clave SSH | Configura tu clave SSH |
Cómo escribir un buen mensaje de commit
Un commit message (/komít mésech/) explica qué cambia y, si hace falta, por qué. Piensa que alguien lo leerá dentro de un año para entender el historial.
La regla del imperativo
El mensaje se escribe en imperativo, como si dieras una orden: “Add login page”, no “Added login page” ni “Adds login page”. Un truco: la frase debe completar “If applied, this commit will…” (si se aplica, este commit…).
| Bien (imperativo) | Mal |
|---|---|
Add login page | Added login page |
Fix crash on empty cart | Fixes crash on empty cart |
Remove unused imports | Removing unused imports |
Update README | README updated |
Rename variable for clarity | Renamed variable |
Más reglas:
- Corto: unos 50 caracteres como máximo en la primera línea (el subject).
- Sin punto final.
- Con mayúscula inicial (o minúscula si usas Conventional Commits).
- Concreto: di qué cambiaste, no “fix stuff” ni “update”.
- Un cambio por commit.
Si necesitas más detalle, añade una línea en blanco y un párrafo (el body) explicando el por qué:
Fix crash on empty cart
The total was calculated with reduce() without an initial value,
which throws an error when the cart has no items.
Traducción: “Arregla el fallo con el carrito vacío. El total se calculaba con reduce() sin valor inicial, lo que lanza un error cuando el carrito no tiene artículos”.
Conventional Commits
Conventional Commits (/konvénshonal komíts/, “commits convencionales”) es una norma muy extendida: el mensaje empieza con un tipo, un ámbito opcional y la descripción.
<type>(<scope>): <description>
| Tipo | Se usa para | Ejemplo |
|---|---|---|
| feat | una nueva funcionalidad (feature) | feat: add dark mode |
| fix | corregir un bug | fix: prevent crash on empty cart |
| docs | cambios en documentación | docs: update installation steps |
| style | formato, sin cambiar la lógica | style: format code with Prettier |
| refactor | reorganizar sin cambiar el comportamiento | refactor: simplify price calculation |
| test | añadir o mejorar tests | test: add tests for login |
| chore | tareas de mantenimiento | chore: update dependencies |
| perf | mejorar el rendimiento | perf: cache search results |
| build | cambios en la compilación | build: add Docker image |
| ci | integración continua | ci: run tests on pull requests |
| revert | revertir un cambio | revert: remove dark mode |
El scope (/skóup/, ámbito) va entre paréntesis e indica la parte afectada:
feat(auth): add login page
fix(cart): handle empty list
docs(readme): add usage section
Un cambio que rompe compatibilidad se marca con !:
feat(api)!: remove the old /users endpoint
Aquí ! indica un breaking change (cambio que rompe lo anterior).
Malos y buenos mensajes
| Mal | Por qué | Mejor |
|---|---|---|
update | No dice qué | fix: correct VAT calculation |
fixed bug | Ni cuál ni dónde | fix(login): show error on wrong password |
changes | Vacío | refactor: split utils into modules |
WIP | “Work in progress”: no sirve en el historial | feat: add search form (first version) |
asdf | Sin sentido | docs: add contributing guide |
Fixed the thing where the menu doesn't open on phone when you click twice | Demasiado largo | fix(menu): open on first tap on mobile |
Un flujo de trabajo en inglés
Así se cuenta una jornada típica con Git, con las frases que usarás en un equipo:
- “I pulled the latest changes from
main.” (Traje los últimos cambios.) - “I created a branch called
feature/search.” (Creé una rama.) - “I committed my changes and pushed the branch.” (Hice commit y subí la rama.)
- “I opened a pull request.” (Abrí una pull request.)
- “A teammate reviewed it and requested changes.” (Un compañero la revisó y pidió cambios.)
- “I fixed the comments and pushed again.” (Arreglé los comentarios y volví a subir.)
- “They approved it and merged it into
main.” (La aprobaron y la fusionaron.)
Y en los comentarios de una revisión (code review):
| Frase | Significado |
|---|---|
Looks good to me / LGTM | Me parece bien |
Nit: ... | Detalle menor |
Could you add a test? | ¿Podrías añadir un test? |
Can we rename this variable? | ¿Podemos renombrar esta variable? |
Thanks for the PR! | ¡Gracias por la PR! |
Please rebase on main. | Haz rebase sobre main, por favor |
Approved | Aprobado |
Request changes | Pedir cambios |
Consejo: desde la primera práctica, escribe tus commits en inglés y en imperativo, aunque el proyecto sea personal. Es una de las formas más rápidas de coger fluidez, y tu historial queda profesional para tu portfolio.
Errores frecuentes
- Escribir
Added,FixedoUpdateden pasado. Usa el imperativo:Add,Fix,Update. - Mensajes vagos como
update,fix,changesoasdf. No dicen qué pasó. Describe el cambio. - Confundir
fetchypull.fetchdescarga sin tocar tu trabajo;pulldescarga y además fusiona. - Confundir
forkyclone.forkcrea tu propia copia en GitHub;clonela trae a tu ordenador. - Meter varios cambios no relacionados en un commit. Divídelos: cada commit, una idea.
- Pronunciar
gitcomo “yit”. Se dice /guit/, con g dura (como en “guitarra”). YGitHubes /guit jab/. - Resolver un conflicto sin quitar las marcas
<<<<<<<. Si quedan en el archivo, el código no funcionará.
Resumen
| Concepto | Inglés | Qué recordar |
|---|---|---|
| Guardar | commit | Imperativo, corto, concreto |
| Subir / bajar | push / pull | git push, git pull |
| Ramas | branch / merge | Rama paralela y fusión |
| Colaborar | fork / pull request | Copia propia y petición de integración |
| Problemas | conflict | Marcas <<<<<<<, =======, >>>>>>> |
| Preparar | stage / staged | Zona previa al commit |
| Formato | Conventional Commits | type(scope): description |
| Tipos | feat, fix, docs, refactor, test, chore | Los más usados |
Para practicar con un proyecto real, repasa Comentarios y README. Siguiente lección: Vocabulario web, con las palabras de HTML, CSS y desarrollo web.
Pon a prueba lo que has aprendido
¿Te ha quedado claro? Márcala y verás tu progreso en el explorador.