git log para coding agents: A..B, A...B y no volcar historia
Resumen
git log lista commits alcanzables, no un rango de diff. A..B es ^A B. A...B es diferencia simétrica. Un agente limita con -n, --oneline o --format y no vuelca -p al LLM. Git 2.50.1.

Qué resuelve
Esta pieza se queda en la decisión práctica: qué instalar, qué riesgo agrega y cómo aplicarlo sin romper operación.
git log no es “muéstrame el PR” ni un diff. El man (Git 2.50.1 / Apple Git-155; git-scm.com/docs/git-log HTTP 200, man 2.55.0 del 2026-06-29): lista commits alcanzables siguiendo parent links desde los commits dados, resta los alcanzables desde los que van con ^, y emite el resto en orden cronológico inverso por default.
Es una operación de conjuntos. git log foo bar ^baz = alcanzables desde foo o bar, menos los de baz. Esta guía no sustituye PRs con gh. El contrato: qué forma corre un agente, qué flags están prohibidas, y cómo no inundar el contexto.
Dos puntos vs tres puntos
El man (DESCRIPTION):
| Forma | Equivale a | Qué ves |
|---|---|---|
git log A..B | git log B ^A | alcanzables desde B, no desde A |
git log A...B | git log A B --not $(git merge-base --all A B) | diferencia simétrica (útiles en merges) |
git log origin..HEAD | git log HEAD ^origin | commits de HEAD que origin no tiene |
A..B en log es rango de revisiones (gitrevisions(7)). En git diff, A..B no es un rango: compara dos extremos. Un agente no copia la notación de un comando al otro.
GitHub Docs (HTTP 200, 2026-09-03, Comparing commits; canónica /pull-requests/how-tos/commit-changes/comparing-commits): la UI /compare usa base (inicio) y compare (fin). No sustituye git log origin/main..HEAD --oneline. Para “qué introduce mi topic” el agente corre log con --oneline -n, no abre compare a ciegas.
-- antes de paths. git log HEAD -- ./src/foo.ts no se confunde si existe una rama src. --follow sigue un solo archivo más allá de renames.

Lo que el agente sí / no corre
| Quiero | Comando | Trampa |
|---|---|---|
| ¿Qué hay en mi topic vs origin? | git log --oneline -n 20 origin/main..HEAD | git log sin -n |
| ¿Qué me falta del remoto? | git log --oneline -n 20 HEAD..origin/main | invertir A..B “de memoria” |
| ¿Hubo merge noise? | git log --oneline --first-parent -n 20 | --graph al LLM |
| ¿Mensajes con “WIP”? | git log --oneline --grep=WIP -n 20 | --grep sin -n |
| ¿SHA concretas, sin ancestros? | git log --no-walk --oneline <sha>… | --no-walk + --graph |
Prohibido en autónomo:
git log/git log -p/git log --statsin-n/--max-county sin--onelineo--format. El man:-n <number>/--max-count=<number>limita a N commits. Sin techo, un repo de 10k commits come la ventana.-p/--patchal LLM. El man toma opciones degit-diff(1)para cómo mostrar el cambio de cada commit. El parche no es el log.--graphal prompt. El man: dibuja historia a la izquierda; imprime líneas extra; no combina con--no-walk; implica--topo-order.--all“para no perderme ramas”. El man: finge que todas las refs derefs/másHEADestán en la línea de comando. Mezcla stash, tags y remotos.--reverse+ dump. El man aplica filtros antes de ordenar;--reverseno es un pager.- Tratar
A...Bde log como el three-dot de un PR en GitHub. El man: simétrica. El PR en GitHub es otra UI. - Correr log en el checkout del humano. Worktree propio (worktrees).
--oneline = --pretty=oneline --abbrev-commit. --format='%h %s' es parseable. %H es el hash completo; %h el abreviado; %s el subject; %an el autor. Un agente que decide “tocar o no” usa --oneline -n, no medium.
--first-parent: al ver un merge, sigue solo el primer padre. El man: da mejor overview de un topic porque los merges al topic suelen ser “ajustarse al upstream”. Cambia el diff default de merges a first-parent.
Receta (60 segundos)
Solo en un worktree propio:
git status -sb
git fetch origin
git log --oneline -n 20 origin/main..HEAD
git log --oneline -n 20 HEAD..origin/main
Si el primer rango está vacío, el topic no introduce commits. Si el segundo tiene filas, falta integrar: pull --ff-only, no un log infinito.
Paths al add salen de status/diff, no de git log -p. SHA para un revert o cherry-pick salen de --oneline -n, no de --all --graph.

Scripts y seguridad
--max-count / -n es el techo. --skip salta N y sigue emitiendo; no es un pager seguro sin otro -n.
--grep=<pattern> limita a commits cuyo mensaje tiene una línea que matchea. El man: se aplica antes de ordenar. Sin -n, un grep amplio sigue siendo un dump.
--no-walk[=(sorted|unsorted)]: muestra solo los commits dados, sin recorrer ancestros. Sin efecto si hay un rango. unsorted respeta el orden de la línea de comando. No combina con --graph.
--decorate (default auto): en terminal imprime refs cortas (refs/heads/ omitido). Un agente que parsea --format='%h %s' no necesita decorate.
Cero pipes de git log -p a git apply en el checkout del humano. Restaurar un archivo es restore.
Checklist
- Worktree propio,
git status -sb. - “Qué introduce mi rama” =
git log --oneline -n 20 origin/main..HEAD. - “Qué me falta” =
git log --oneline -n 20 HEAD..origin/main. - Siempre
-n/--max-count. Cero-pal LLM. Cero--graph. Cero--all. -
A..Bde log ≠A..Bde diff.A...Bde log es simétrica, no el compare de GitHub. -
--no-walksolo para SHA concretas; nunca con--graph. - Add por paths. Cero push a
main.
FAQ
¿git log es el PR? No. GitHub Docs: compare es base→compare en /compare. git log sin args es HEAD hacia atrás, sin techo.
¿A..B vs A...B? El man: A..B = B ^A. A...B = diferencia simétrica (A B --not $(git merge-base --all A B)). No es el three-dot de un PR.
¿--oneline vs --format? --oneline = --pretty=oneline --abbrev-commit. --format='%h %s' es el contrato para scripts.
¿Puedo git log --graph --all para “entender el repo”? El man: --all mete todas las refs; --graph añade líneas extra y no combina con --no-walk. No cabe en un prompt.
El curso instalar un agente cubre el loop local. Hub: comparativas y decisiones. Log no es sandbox (sandboxing) ni deshacer unstaged (restore).
Verificado 2026-09-03 contra git-log(1) (Git 2.50.1 / Apple Git-155), git-scm.com/docs/git-log (HTTP 200, man 2.55.0) y GitHub Docs “Comparing commits” (HTTP 200, canónica /pull-requests/how-tos/commit-changes/comparing-commits).
Lecturas relacionadas
Sigue explorando Coding Agents y otras piezas para builders.

git status para coding agents: porcelain, XY, no el long

Reusable workflows: workflow_call, no copies el YAML entre repos

schedule (cron) en GitHub Actions: UTC, no cada minuto
