git-review-workflow 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 EzeVillo
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.es.md ADDED
@@ -0,0 +1,548 @@
1
+ # git-review-workflow
2
+
3
+ > Revisá un pull request **editándolo y corriéndolo**, no solo leyéndolo. Todo el
4
+ > PR aparece en tu working tree como un único diff staged; después tus
5
+ > correcciones se extraen a una rama limpia automáticamente. Re-revisá solo lo
6
+ > que cambió.
7
+
8
+ [![CI](https://github.com/EzeVillo/git-review-workflow/actions/workflows/ci.yml/badge.svg)](https://github.com/EzeVillo/git-review-workflow/actions/workflows/ci.yml)
9
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
10
+ [![Release](https://img.shields.io/github/v/tag/EzeVillo/git-review-workflow?label=release&sort=semver)](https://github.com/EzeVillo/git-review-workflow/releases)
11
+
12
+ [English](README.md) · **Español**
13
+
14
+ ---
15
+
16
+ Revisar en una web está bien para dejar comentarios, pero es malo para realmente
17
+ *correr* y *editar* el código. `git review start` pone todo el PR en tu working
18
+ tree como **cambios staged sin commitear**: crea una rama `review/<rama>` cuyo
19
+ working tree tiene el tip del PR, pero con el `HEAD` parado en el merge-base con
20
+ tu rama base. Como es simplemente tu working tree, abrís todo el PR en cualquier
21
+ editor — leés el diff, lo editás inline, corrés los tests — y cuando terminás,
22
+ `git review finish` extrae *tus* ediciones a una rama separada `review-fixes/<rama>`
23
+ (o directo sobre la rama del PR), manteniéndolas limpiamente aparte del trabajo
24
+ del autor. Re-revisá solo los commits nuevos tras una actualización con `--delta`.
25
+
26
+ > **Todos los comandos viven bajo `git review <verbo>`** — `git review start`,
27
+ > `git review finish`, `git review status`, etc., como `git bisect` y `git stash`
28
+ > agrupan sus verbos.
29
+
30
+ ## ¿Por qué no usar la vista de PR de tu IDE?
31
+
32
+ La mayoría de las herramientas te dejan *ver* un PR. Lo que esto resuelve es
33
+ *actuar* sobre uno — editarlo y correrlo como cambios normales del working tree y
34
+ después devolver tus correcciones sin stash ni cherry-pick manuales.
35
+
36
+ | | Ver el PR | Editar y correr como working tree | Extraer tus fixes automáticamente | Re-review incremental (`--delta`) | Independiente del editor |
37
+ |----------------------------------|:------------------:|:---------------------------------:|:---------------------------------:|:---------------------------------:|:------------------------:|
38
+ | **git-review-workflow** | ✅ | ✅ | ✅ | ✅ | ✅ |
39
+ | `gh pr checkout` / `glab` | ⚠️ checkout pelado | ✅ | ❌ | ❌ | ✅ |
40
+ | JetBrains *Review Pull Request* | ✅ | ⚠️ solo en el IDE | ❌ | ❌ | ❌ |
41
+ | Extensión *GitHub PR* de VS Code | ✅ | ⚠️ solo en el IDE | ❌ | ❌ | ❌ |
42
+ | Web de GitHub / GitLab | ✅ | ❌ | ❌ | ⚠️ parcial | ✅ |
43
+
44
+ Como el PR son simplemente cambios staged, cualquier cosa que lea un diff de Git
45
+ lo ve entero — incluidos agentes de IA como Claude Code o Codex que no tienen una
46
+ función propia para revisar PRs. Apuntás uno al diff staged y puede revisar o
47
+ corregir todo el PR ahí mismo.
48
+
49
+ Y para las cosas chicas — un rename, un typo, un nombre de variable más claro —
50
+ arreglarlo vos mismo es más rápido y menos burocrático que dejar un comentario y
51
+ esperar la ida y vuelta, sobre todo cuando ya estás mirando el PR en tu editor.
52
+ Como tus ediciones se extraen automáticamente, el arreglo te cuesta más o menos
53
+ lo mismo que habría costado el comentario. O le pasás el diff staged a un agente
54
+ y que haga el cambio por vos.
55
+
56
+ Si mayormente *comentás*, el panel nativo de PR de tu IDE alcanza. Si revisás
57
+ editando y corriendo el código — en cualquier editor o agente — esto es lo que
58
+ falta.
59
+
60
+ ## Inicio rápido
61
+
62
+ ```sh
63
+ # 1. Instalar (necesita Node.js; ver Instalación para Homebrew y una opción sin Node)
64
+ npm install -g git-review-workflow
65
+
66
+ # 2. Decirle dónde se integran los PRs, una vez por repo
67
+ git config reviewworkflow.base develop
68
+
69
+ # 3. Dejar la rama de un PR staged como un único diff y abrir el repo en tu IDE
70
+ git review start feature/login
71
+ # ...leer y editar el diff staged en tu editor, correr tests...
72
+ git review finish # extraer tus ediciones a review-fixes/feature/login
73
+ ```
74
+
75
+ ¿Preferís Homebrew, un instalador nativo de Windows (PowerShell), o una
76
+ instalación que no necesite Node? Mirá
77
+ [Instalación](#instalación). Para el flujo completo — re-revisar actualizaciones,
78
+ recorrer un PR commit por commit, limpieza — mirá [Flujo típico](#flujo-típico).
79
+
80
+ ## Instalación
81
+
82
+ Estos comandos se enchufan a `git` como un único subcomando — los usás como
83
+ `git review start`, `git review finish`, etc. Elegí el método que mejor te quede.
84
+ Las opciones por gestor de paquetes son las más fáciles y **te configuran el
85
+ `PATH` solas**.
86
+
87
+ ### npm (recomendado)
88
+
89
+ Si tenés [Node.js](https://nodejs.org), esta es la instalación de un solo comando.
90
+ Te pone `git review` en el `PATH` y anda en Linux, macOS y Windows (en Windows los
91
+ comandos igual corren bajo Git Bash):
92
+
93
+ ```sh
94
+ npm install -g git-review-workflow
95
+ ```
96
+
97
+ Actualizá con `npm install -g git-review-workflow@latest`; desinstalá con
98
+ `npm uninstall -g git-review-workflow`. El autocompletado se configura igual que
99
+ en las otras instalaciones que no son Homebrew — mirá la nota más abajo.
100
+
101
+ ### Homebrew (macOS / Linux)
102
+
103
+ ```sh
104
+ brew tap EzeVillo/git-review-workflow https://github.com/EzeVillo/git-review-workflow
105
+ brew install EzeVillo/git-review-workflow/git-review-workflow
106
+ ```
107
+
108
+ El autocompletado queda configurado automáticamente. Para actualizar a la última
109
+ versión: `brew upgrade git-review-workflow`.
110
+
111
+ ### Windows (PowerShell)
112
+
113
+ Necesitás [Git for Windows](https://gitforwindows.org), que provee la shell
114
+ donde corren estos comandos. Abrí PowerShell y ejecutá:
115
+
116
+ ```powershell
117
+ irm https://raw.githubusercontent.com/EzeVillo/git-review-workflow/main/web-install.ps1 | iex
118
+ ```
119
+
120
+ Instala el comando en `~\.local\bin` y agrega esa carpeta al `PATH` de tu usuario
121
+ automáticamente. Abrí una terminal nueva cuando termine. Volvé a correrlo para
122
+ actualizar; para desinstalar:
123
+
124
+ ```powershell
125
+ irm https://raw.githubusercontent.com/EzeVillo/git-review-workflow/main/web-uninstall.ps1 | iex
126
+ ```
127
+
128
+ (Si tenés Node, `npm install -g git-review-workflow` también anda en Windows — los
129
+ comandos igual corren bajo Git Bash en ambos casos.)
130
+
131
+ ### Instalación en una línea (Linux, macOS, WSL, Git Bash)
132
+
133
+ ¿Sin gestor de paquetes? Esto descarga el comando y lo instala en `~/.local/bin`
134
+ — ni siquiera necesitás clonar el proyecto antes:
135
+
136
+ ```sh
137
+ curl -fsSL https://raw.githubusercontent.com/EzeVillo/git-review-workflow/main/web-install.sh | sh
138
+ ```
139
+
140
+ Volvé a correrlo para actualizar (siempre instala la última versión). Para
141
+ desinstalar (pasale el mismo `PREFIX` si lo cambiaste):
142
+
143
+ ```sh
144
+ curl -fsSL https://raw.githubusercontent.com/EzeVillo/git-review-workflow/main/web-uninstall.sh | sh
145
+ ```
146
+
147
+ <details>
148
+ <summary>Desde una copia descargada</summary>
149
+
150
+ Si clonaste o descargaste el proyecto, abrí su carpeta en una terminal y corré:
151
+
152
+ ```sh
153
+ ./install.sh
154
+ ```
155
+
156
+ Instala el dispatcher `git review` en `~/.local/bin` (cambiá la ubicación con
157
+ `PREFIX=/usr/local/bin ./install.sh`). Los verbos viajan al lado suyo como
158
+ helpers privados, no como comandos sueltos en tu `PATH`. Lo deshacés cuando
159
+ quieras con `./uninstall.sh`. Para actualizar, simplemente hacé `git pull` dentro
160
+ del repo — el symlink toma los cambios automáticamente.
161
+ </details>
162
+
163
+ <details>
164
+ <summary>"command not found" — agregar <code>~/.local/bin</code> a tu PATH</summary>
165
+
166
+ Tu `PATH` es la lista de carpetas donde tu terminal busca cuando escribís un
167
+ comando. Homebrew, npm y el instalador de PowerShell agregan su carpeta por vos. La
168
+ instalación en una línea y la manual usan `~/.local/bin`, que en la mayoría de
169
+ los sistemas ya está en el `PATH`. Si no lo está, el instalador te deja un aviso
170
+ — agregalo **una sola vez** pegando una línea en el archivo de config de tu
171
+ shell:
172
+
173
+ | Si tu terminal usa… | Agregá esta línea al archivo… | La línea a agregar |
174
+ |-------------------------------------|--------------------------------------|----------------------------------------|
175
+ | **bash** | `~/.bashrc` | `export PATH="$HOME/.local/bin:$PATH"` |
176
+ | **zsh** (default en macOS reciente) | `~/.zshrc` | `export PATH="$HOME/.local/bin:$PATH"` |
177
+ | **fish** | *(sin archivo — corré esto una vez)* | `fish_add_path ~/.local/bin` |
178
+
179
+ ¿No sabés cuál usás? Corré `echo $0`. Después de editar el archivo, **abrí una
180
+ terminal nueva** (o hacé `source` del archivo). Corré `git review -h` para
181
+ confirmar.
182
+ </details>
183
+
184
+ <details>
185
+ <summary>Autocompletado (instalaciones manuales)</summary>
186
+
187
+ Homebrew te lo configura. Si no, decile a tu shell que cargue el archivo
188
+ correspondiente al arrancar. Reemplazá `/ruta/a/git-review-workflow` por la
189
+ carpeta donde descargaste el proyecto.
190
+
191
+ ```sh
192
+ # bash — en ~/.bashrc
193
+ source /ruta/a/git-review-workflow/completions/git-review-workflow.bash
194
+
195
+ # zsh — en ~/.zshrc
196
+ source /ruta/a/git-review-workflow/completions/git-review-workflow.zsh
197
+
198
+ # fish — copiá el archivo a la carpeta de completions de fish (sin línea de config)
199
+ cp /ruta/a/git-review-workflow/completions/git-review-workflow.fish \
200
+ ~/.config/fish/completions/
201
+ ```
202
+
203
+ Después abrí una terminal nueva. Ahora, escribiendo `git review ` y apretando
204
+ **Tab**, te ofrece los verbos; `git review start ` te ofrece los nombres de tus
205
+ ramas.
206
+ </details>
207
+
208
+ <details>
209
+ <summary>Git Bash en Windows — ¿error de SSL al instalar?</summary>
210
+
211
+ Si ves `schannel: next InitializeSecurityContext failed` o un mensaje de
212
+ `revocation check`, tu Git for Windows está usando el backend SSL de Windows.
213
+ Arreglalo una vez y volvé a correr el instalador:
214
+
215
+ ```sh
216
+ git config --global http.sslBackend openssl
217
+ ```
218
+
219
+ </details>
220
+
221
+ ## Comandos
222
+
223
+ > **Cómo leer la sintaxis:** `<x>` es **obligatorio**, `[x]` es **opcional**, y
224
+ > `a | b` significa **elegí uno, no los dos**.
225
+
226
+ Cada comando es un verbo bajo `git review`. Corré `git review -h` para ver la
227
+ lista, o `git review <verbo> -h` para el detalle de un verbo.
228
+
229
+ | Comando | Qué hace |
230
+ |--------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
231
+ | `git review [-h \| --version]` | Lista todos los verbos o imprime la versión instalada. |
232
+ | `git review start [<rama>] [<base> \| --base <base> \| --delta \| --from <commit>] [--step] [--local]` | Hace fetch de `origin` y deja el diff del PR staged en una nueva rama `review/<rama>` (omití `<rama>` para revisar la rama actual; `--local` revisa ramas locales sin hacer fetch). |
233
+ | `git review compare <a> <b> [--step]` | Deja staged el diff entre dos commit-ish (tags, commits, ramas) en modo lectura, para leerlo o recorrerlo. `git review finish` se niega — no hay a dónde escribir. |
234
+ | `git review next` / `git review prev` | Mueve una review `--step` al commit siguiente / anterior. |
235
+ | `git review status` | Muestra el estado de la review en la rama actual. |
236
+ | `git review list` | Lista todas las reviews en curso y las guardadas (la rama actual marcada con `*`). |
237
+ | `git review save` | Pausa la review actual como `review-saved/<rama>` y vuelve a donde empezaste. |
238
+ | `git review continue [rama]` | Retoma una review guardada con `git review save`. |
239
+ | `git review finish [--onto-source] [--resume \| --abort [--force]]` | Desde una rama `review/*`, extrae tus ediciones a `review-fixes/<rama>` (o la rama del PR); `--abort` deshace el último finish. |
240
+ | `git review preview [--stat]` | Muestra las ediciones que hiciste hasta ahora — el diff que `finish` extraería — sin commitear ni cambiar de rama. |
241
+ | `git review abort` | Cancela la review actual y vuelve a donde empezaste. |
242
+ | `git review clean [rama]` | Borra las ramas `review/*` y `review-fixes/*` de `<rama>`, o todas. |
243
+ | `git review forget --delta (<rama> \| --all \| --stale [--dry-run])` | Descarta el marcador de `--delta` de una rama, de todas, o solo de las obsoletas. |
244
+ | `git review forget --saved (<rama> \| --all) [--dry-run]` | Descarta una review guardada con `git review save`. |
245
+
246
+ ### `git review start`
247
+
248
+ Tiene dos ejes independientes — **rango** (desde dónde empieza) y **layout**
249
+ (`--step` o no), que se combinan libremente.
250
+
251
+ - `<rama>` — la rama a revisar. **Omitila para revisar la rama que tenés
252
+ checkouteada** — el default propio de git (como `push`, `status`, `log`). Solo
253
+ resuelve el nombre; el modo lo siguen eligiendo los flags, así que combiná la
254
+ rama omitida con `--local` para revisar tu trabajo local. Sin `--local` revisa
255
+ `origin/<rama>` — si difiere de tu rama checkouteada te avisa, porque estarías
256
+ revisando un snapshot distinto al que tenés. Con la rama omitida, falla con HEAD
257
+ detached o estando sobre una rama `review/*`.
258
+ - `base` — commit-ish contra el que comparar: una rama, un **tag** o un commit.
259
+ Tomada de `reviewworkflow.base` (ver abajo); el argumento posicional la
260
+ sobreescribe. **Obligatoria para una review completa** — no hay default, así que
261
+ una review completa sin base configurada falla y te pide que la configures. No se
262
+ usa con `--delta` ni `--from`, que ya traen su propio punto de inicio — pasar una
263
+ base explícita junto con ellos es un error (una base que viene de config
264
+ simplemente se ignora).
265
+ - `--base <base>` — la base contra la que comparar, como flag. Usala para pasar
266
+ una base dejando que `<rama>` defaultee a la rama actual — ej.
267
+ `git review start --base develop` revisa la rama en la que estás contra
268
+ `develop` (el posicional solitario siempre se toma como `<rama>`, así que el
269
+ flag es la forma de llegar a la base sin nombrar la rama). No se puede combinar
270
+ con una base posicional.
271
+ - `--delta` — revisar solo los commits agregados **desde tu última review** de
272
+ esta rama, en vez de todo el PR. Ideal para re-revisar un PR actualizado. El
273
+ tip registrado sobrevive a `git review clean`, así que funciona aunque hayas
274
+ borrado las ramas de review; para descartarlo usá `git review forget --delta`.
275
+ - `--from <commit>` — revisar solo los commits **después de `<commit>`**. Útil
276
+ cuando no hay review registrada para usar `--delta`, o para elegir un punto de
277
+ inicio exacto. Mutuamente excluyente con `--delta`.
278
+ - `--step` — revisar el rango **de a un commit por vez** (combinalo con `--delta`
279
+ o `--from` para recorrer solo esos commits). Arrancás en el primer commit
280
+ después del merge-base y el comando imprime el mensaje del autor. Editás y
281
+ corrés `git review next` para bancar tus cambios y pasar al siguiente commit
282
+ con el árbol limpio. Cuando se acaban los commits, corrés `git review finish` y
283
+ todas tus ediciones bancadas se re-aplican sobre el tip del PR — igual que en
284
+ una review completa.
285
+ - `--local` — revisar tus ramas **locales** directamente, sin hacer fetch. La
286
+ review se arma desde tu `<rama>` local y se compara contra tu base local, así
287
+ que funciona offline y te deja revisar tu propio trabajo antes de pushear.
288
+ Mantiene su propio marcador de `--delta`, separado del remoto, así una review
289
+ local y una remota de la misma rama nunca se pisan el progreso.
290
+ - Siempre actualiza desde `origin` primero y **falla** si no puede (salvo con
291
+ `--local`). La revisión se arma desde `origin/<rama>`, nunca desde una copia
292
+ local vieja. Si una rama local con el mismo nombre apunta a otro lado, te avisa:
293
+ la review refleja el remoto, no tu checkout, y un `git review finish
294
+ --onto-source` posterior se va a negar hasta que tu rama local coincida.
295
+ - No corre si tenés cambios locales — arrancá desde una rama limpia.
296
+ - **Los merges de la rama base se excluyen.** Si el autor mergeó la base (ej.
297
+ `develop`) dentro del PR, ese contenido mergeado queda afuera de la review en
298
+ todos los modos, así ves solo los cambios del autor.
299
+ - `--` termina el parseo de opciones, la convención habitual de git: todo lo que
300
+ va después se trata como argumento posicional, así una rama cuyo nombre empieza
301
+ con `-` igual se puede revisar (ej. `git review start -- --weird develop`).
302
+
303
+ ### `git review compare`
304
+
305
+ Deja staged el diff entre dos commit-ish — dos tags, dos commits, dos ramas —
306
+ como una review de solo lectura, para leerlo inline o recorrerlo commit por
307
+ commit con la misma UX que una review real, sin `git diff | less`.
308
+
309
+ ```sh
310
+ git review compare v1.0 v2.0 # dejar staged el diff entre dos releases
311
+ git review compare v1.0 v2.0 --step # ...y recorrerlo commit por commit
312
+ ```
313
+
314
+ - Compara `<a>..<b>`: `<a>` es el límite inferior (donde empieza la review),
315
+ `<b>` el tip cuyo contenido llena el working tree. Ambos se resuelven a commits,
316
+ así que andan tags y SHAs crudos, no solo nombres de rama.
317
+ - Es **de solo lectura por diseño**. Toda la mitad editar→finish del workflow
318
+ necesita una rama escribible a la cual devolver, y un tag o un commit no lo es —
319
+ así que `git review finish` sobre un compare se niega explícitamente ("esta
320
+ review es de solo lectura, no hay a dónde escribir"). Usá `git review abort`
321
+ para terminarlo.
322
+ - `--step` lo recorre de a un commit, igual que `git review start --step`, con
323
+ `git review next` / `git review prev`.
324
+
325
+ ### `git review next` / `git review prev`
326
+
327
+ Mueven una review `--step` para adelante o para atrás. Cada movimiento banca las
328
+ ediciones del commit actual y restaura las que tenías bancadas en el commit al
329
+ que vas, así podés ir y venir sin perder trabajo.
330
+
331
+ ### `git review status`
332
+
333
+ Muestra la review actual: PR de origen, modo, y — en modo `--step` — en qué
334
+ commit estás (`[k/N]`) y qué pasos tienen ediciones bancadas.
335
+
336
+ ### `git review list`
337
+
338
+ Muestra *todas* las ramas `review/*` en curso a la vez (con su PR de origen, modo
339
+ y posición de paso). Las reviews pausadas con `git review save` también aparecen,
340
+ bajo `saved`. La rama en la que estás parado se marca con un `*`.
341
+
342
+ ### `git review save` / `git review continue`
343
+
344
+ `git review save` te deja apartar una review y retomarla después. Convierte la
345
+ `review/<rama>` actual en `review-saved/<rama>` y te devuelve a la rama desde la
346
+ que empezaste, llevándose todo lo necesario para retomar justo donde lo dejaste:
347
+
348
+ - En modo PR completo, el diff del PR staged y tus ediciones sin commitear.
349
+ - En modo `--step`, el commit en el que estás, sus ediciones y todas las
350
+ ediciones que tengas bancadas en los otros commits. Los refs de ediciones se
351
+ mueven de `refs/review-edits/` (que `git review clean` poda) a
352
+ `refs/review-saved-edits/`, así un `git review clean` nunca toca una review
353
+ guardada.
354
+
355
+ `git review continue` convierte `review-saved/<rama>` de nuevo en la
356
+ `review/<rama>` activa y restaura ese estado exacto — en modo `--step` te deja de
357
+ vuelta en el mismo commit, con `git review next` / `git review prev` funcionando
358
+ como antes. Sin argumento retoma la única review guardada, o las lista si hay más
359
+ de una; nombrá una rama para elegir cuál.
360
+
361
+ Empezar un `git review start` nuevo sobre una rama que ya tiene una review
362
+ guardada se rechaza, para que no pierdas la pausada sin querer — retomala o
363
+ descartala con `git review forget --saved` primero.
364
+
365
+ ### `git review finish`
366
+
367
+ - Por defecto — crea `review-fixes/<rama>` sobre el tip del PR con tus ediciones
368
+ staged, para que las revises y commitees vos.
369
+ - `--onto-source` — en su lugar deja tus ediciones staged sobre la rama del PR
370
+ misma, para que las revises y commitees vos ahí.
371
+ - En cualquiera de los dos casos el resultado queda local — revisalo y pusheá a
372
+ mano cuando estés listo.
373
+ - `--resume` — en modo `--step`, si las ediciones bancadas chocan con el tip del
374
+ PR, el replay deja marcadores de conflicto y se detiene. Resolvélos en el árbol
375
+ y corré `git review finish --resume` (con los mismos flags) para seguir.
376
+ - `--abort` — deshace el último finish y te devuelve a `review/<rama>` justo donde
377
+ estabas editando, igual que `git merge --abort` revierte un merge. Se niega si
378
+ cambiaste la rama del finish desde entonces, para que no pierdas trabajo; agregá
379
+ `--force` para descartar esos cambios y abortar de todas formas.
380
+ - Se niega sobre un `git review compare` de solo lectura — no hay una rama
381
+ escribible a la cual devolver tus ediciones.
382
+
383
+ ### `git review preview`
384
+
385
+ Muestra las ediciones que hiciste hasta ahora — el mismo diff que `git review
386
+ finish` extraería, tus ediciones sobre el tip del PR — pero **nunca commitea,
387
+ nunca cambia de rama y nunca toca tu árbol de trabajo ni el índice**, así volvés
388
+ directo a editar donde lo dejaste. Pensalo como "¿qué me daría `finish` ahora
389
+ mismo?".
390
+
391
+ - `--stat` — muestra un resumen tipo diffstat en lugar del diff completo.
392
+ - En modo `--step` re-aplica las ediciones del commit actual más cada edición
393
+ bancada sobre el tip, igual que `finish`. Una edición que choca de verdad con el
394
+ tip es el único caso que difiere: un preview de solo lectura no puede dejarte
395
+ marcadores de conflicto, así que omite esa edición e imprime una nota
396
+ apuntándote a `finish`.
397
+
398
+ ### `git review abort`
399
+
400
+ Cancela la review actual en un paso: te devuelve a la rama desde la que empezaste
401
+ y borra la rama `review/<rama>` y sus ediciones bancadas. Como la review se
402
+ canceló (no se completó), vuelve el marcador de `--delta` a tu última review
403
+ real, así un `--delta` posterior no se saltea commits que nunca revisaste.
404
+
405
+ ### `git review clean`
406
+
407
+ - Sin `<rama>`, borra todas las ramas `review/*` y `review-fixes/*`.
408
+ - Nunca borra la rama en la que estás parado.
409
+ - También descarta los edit refs bancados commit-a-commit, incluso cuando no
410
+ queda ninguna rama de review.
411
+ - Deja intacto el marcador de `--delta` — para descartarlo usá `git review forget --delta`.
412
+ - Deja intactas las reviews guardadas (`review-saved/*`) — para descartar una usá
413
+ `git review forget --saved`.
414
+
415
+ ### `git review forget --delta`
416
+
417
+ Descarta el tip de la última review que usa `--delta`. El marcador se conserva a
418
+ propósito para que `--delta` sobreviva a `git review clean`; así es como lo borrás.
419
+
420
+ - `<rama>` — olvidar el/los marcador(es) de una rama de origen: el remoto y el de
421
+ `--local` si existe.
422
+ - `--all` — olvidar todos los marcadores (no toca `reviewworkflow.base`).
423
+ - `--stale` — hace fetch y prune de `origin`, y olvida solo los marcadores cuya
424
+ rama ya no existe: los remotos cuya `origin/<rama>` se fue (PRs mergeados y
425
+ borrados) y los de `--local` cuya `<rama>` local se fue. Si el fetch falla,
426
+ aborta sin borrar nada.
427
+ - `--dry-run` — con `--stale`, lista lo que olvidaría sin hacerlo. Se rechaza con
428
+ los otros modos, donde el objetivo ya es explícito.
429
+
430
+ ### `git review forget --saved`
431
+
432
+ Descarta una review apartada con `git review save`: borra `review-saved/<rama>`,
433
+ sus ediciones bancadas y su metadata. Como una review guardada quedó pausada (no
434
+ completada), también vuelve el marcador de `--delta` a tu última review real, igual
435
+ que hace `git review abort`.
436
+
437
+ - `<rama>` — descartar la review guardada de una rama de origen.
438
+ - `--all` — descartar todas las reviews guardadas.
439
+ - `--dry-run` — listar lo que se descartaría sin descartarlo.
440
+
441
+ ## Configurar la rama base
442
+
443
+ La rama base es donde se integran los PRs (`develop`, `main`, `master`, …) y
444
+ varía por equipo, así que no hay default — configurala una vez por repositorio:
445
+
446
+ ```sh
447
+ git config reviewworkflow.base develop
448
+ ```
449
+
450
+ Orden de resolución: argumento posicional `base` (o `--base <base>`) →
451
+ `reviewworkflow.base`. Si no hay ninguno, una review completa falla y te pide que
452
+ la configures. La base es cualquier commit-ish — una rama, un tag (`v1.0`) o un
453
+ commit — no solo un nombre de rama.
454
+
455
+ ## Configurar el remoto
456
+
457
+ Por defecto los comandos hacen fetch y push contra `origin`. Si revisás un
458
+ repositorio que no es tuyo (un `upstream` con tu `origin` como fork, por
459
+ ejemplo), apuntá el flujo a ese remoto:
460
+
461
+ ```sh
462
+ git config reviewworkflow.remote upstream
463
+ ```
464
+
465
+ Afecta a `git review start` y `git review forget --delta --stale`. Una review
466
+ `--local` ignora el remoto por completo.
467
+
468
+ ### Es por repositorio por diseño
469
+
470
+ Tanto `reviewworkflow.base` como `reviewworkflow.remote` son simples claves de
471
+ `git config`, así que se guardan **por repositorio** (en el `.git/config` de cada
472
+ uno). No hay perfiles ni un archivo de config compartido: cada repositorio en el
473
+ que trabajás mantiene su propia base y su propio remoto de forma independiente, y
474
+ nunca se mezclan entre sí:
475
+
476
+ ```sh
477
+ # repo A: los PRs se integran en main, traídos desde origin (el default)
478
+ cd ~/proyecto-a && git config reviewworkflow.base main
479
+
480
+ # repo B: los PRs se integran en develop, revisados desde un upstream ajeno
481
+ cd ~/proyecto-b
482
+ git config reviewworkflow.base develop
483
+ git config reviewworkflow.remote upstream
484
+ ```
485
+
486
+ Lo mismo aplica a los marcadores de `--delta`: también viven en la config de cada
487
+ repo. Si querés un valor de respaldo para *todos* tus repos, configuralo de forma
488
+ global (`git config --global reviewworkflow.base main`); un valor por repo lo
489
+ sobrescribe, y un argumento posicional `base` sobrescribe a ambos.
490
+
491
+ ## Flujo típico
492
+
493
+ ```sh
494
+ git config reviewworkflow.base develop # una vez por repo
495
+
496
+ git review start feature/login # dejar todo el PR staged
497
+ # ...abrir el repo en tu IDE, leer el diff staged, editar inline, correr tests...
498
+ git review finish # extraer fixes a review-fixes/feature/login
499
+ git diff --cached && git commit -m "address review comments"
500
+ git review clean feature/login # limpiar
501
+
502
+ # Re-revisar después de que el autor pushea más commits:
503
+ git review start feature/login --delta # solo los commits nuevos
504
+ git review start feature/login --delta --step # ...y recorrerlos de a uno
505
+
506
+ # O recorrer el PR commit por commit desde el principio:
507
+ git review start feature/login --step # arrancar en el primer commit
508
+ # ...editar, y después...
509
+ git review next # bancar cambios, pasar al siguiente
510
+ git review next # ...hasta "no more commits"
511
+ git review finish # re-aplicar todos tus cambios sobre el tip
512
+
513
+ # Elegir un commit de inicio explícito:
514
+ git review start feature/login --from a1b2c3d
515
+
516
+ # Revisar la rama en la que ya estás (omitiendo el nombre):
517
+ git switch feature/login && git review start # contra la base configurada
518
+ git review start --base develop # ...o contra una base explícita
519
+
520
+ # Comparar contra un tag en vez de una rama:
521
+ git review start feature/login v1.0
522
+
523
+ # Comparar dos releases en modo lectura:
524
+ git review compare v1.0 v2.0
525
+
526
+ # Revisar tu propia rama local antes de pushear, offline:
527
+ git review start feature/login --local
528
+ ```
529
+
530
+ ## Requisitos
531
+
532
+ - Git 2.23+ (usa `git switch`). Se recomienda Git 2.38+: excluir el contenido de
533
+ la base mergeado dentro del PR usa `git merge-tree --write-tree`, y en git más
534
+ viejo ese paso se saltea (el contenido de la base mergeado aparecería en
535
+ `--delta`/`--from`).
536
+ - Un remoto llamado `origin` (o el que configures con `reviewworkflow.remote`).
537
+ - Una shell POSIX. En Linux y macOS es la de por defecto. En Windows los comandos
538
+ corren bajo Git Bash o WSL, no en `cmd.exe` ni PowerShell.
539
+
540
+ ## Contribuir
541
+
542
+ Reportes de bugs, fixes e ideas son bienvenidos. Mirá
543
+ [CONTRIBUTING.md](CONTRIBUTING.md) para cómo correr los tests y el proceso de
544
+ release.
545
+
546
+ ## Licencia
547
+
548
+ [MIT](LICENSE) © EzeVillo