Dos páginas con diferencias resaltadas, flechas de conexión y una lupa.

Un diff checker muestra exactamente qué cambió al comparar dos textos —qué líneas se añadieron, cuáles se eliminaron y cuáles se editaron— en lugar de obligarte a recorrer ambos documentos con la vista. Esta guía explica cómo lanzar una comparación, cómo leer el resultado y los ajustes que deciden si la salida es señal o ruido.

Funciona con código fuente, archivos de configuración, migraciones SQL, contratos y prosa, y la comparación se ejecuta por completo en tu navegador. Antes de comparar dos payloads JSON, normaliza ambos lados con el formateador JSON para que la sangría no se reporte como un cambio; si el texto llega codificado en Base64, decodifícalo primero con el codificador / decodificador Base64.

01Qué compara realmente un diff

Un diff no es una comprobación de igualdad carácter a carácter. Calcula el script de edición más corto entre los dos lados —el conjunto mínimo de líneas insertadas y eliminadas que convierte una versión en la otra— y reporta esas inserciones y eliminaciones: las líneas que solo están a la izquierda son eliminaciones, las que solo están a la derecha son adiciones y todo lo demás es contexto. Git resuelve ese mismo problema con su algoritmo myers por defecto.

Por eso una edición pequeña en un archivo largo produce un diff pequeño aunque los dos documentos difieran en cientos de caracteres: solo se marcan las líneas cambiadas. Dos consecuencias importan en la práctica:

  • Un bloque movido parece una eliminación más una adición, porque el algoritmo compara posiciones y no intenciones.
  • Los cambios de formato —reindentación, cambio de fin de línea, espacio final— aparecen como diferencias reales salvo que le digas a la herramienta que los ignore.

02Comparar dos bloques de texto

  1. Pega el original en Original — El panel izquierdo es la versión de referencia. Puedes pegar, escribir o subir un archivo con el botón Upload.
  2. Pega la versión revisada en Modified — El panel derecho contiene la versión nueva. Ambos paneles aceptan pegados grandes y archivos.
  3. Pulsa Compare — El panel de resultado marca las eliminaciones en rojo y las adiciones en verde, y el resumen indica cuántos bloques cambiaron y cuántas líneas se añadieron o borraron.
  4. Salta entre cambios — Usa Previous y Next para recorrer los bloques en lugar de desplazarte. El contador (por ejemplo, «3 changes · 2 added · 1 deleted») te dice cuánto se movió de verdad.
  5. Elige vista dividida o unificada — Split alinea las dos versiones en paralelo. Unified las condensa en una sola columna con el patch: el formato que espera quien revisa y el que pegas en un ticket.
  6. Ajusta granularidad y filtros — Cambia entre Line, Word y Char, y activa Ignore whitespace o Ignore case cuando las únicas diferencias sean de formato.
  7. Intercambia, copia o exporta — Swap Sides invierte la dirección, Copy saca cualquiera de los paneles y Export .patch descarga un patch unificado estándar —el formato que lee git apply— que puedes adjuntar a una revisión.

03Granularidad por línea, palabra o carácter

La granularidad por línea es la predeterminada y la correcta para código y configuración, porque las revisiones se escriben por líneas y así es como git reporta los cambios.

La granularidad por palabra mantiene visible la parte no modificada de una línea editada, así que cambiar una palabra en un párrafo no parece una frase reescrita. Úsala en prosa, mensajes de commit y traducciones.

La granularidad por carácter baja un nivel más y sirve para atrapar un cambio invisible: una comilla cambiada, un separador distinto o un espacio duro que parece un espacio normal. Cuando ya conoces el patrón exacto, el probador de regex encuentra y reemplaza cada aparición en todo el archivo.

04Ignorar espacio y mayúsculas

Dos archivos que se ven idénticos pueden seguir difiriendo en formas que no buscabas. Reindentar un JSON, pasar de CRLF a LF o los espacios finales que añade un editor producen ruido de diff que esconde el cambio que buscas.

Ignore whitespace colapsa las series de espacios y tabuladores e ignora el espacio inicial y final al comparar líneas, así que un archivo solo reformateado no reporta cambios: el mismo comportamiento de diff -w y diff -b en GNU diffutils. Ignore case trata ALPHA y alpha como iguales (diff -i), útil al comparar claves de configuración o palabras clave de SQL.

05Leer un patch unificado

Un solo hunk de un diff unificado: las líneas eliminadas empiezan por -, las añadidas por + y el contexto sin cambios por un espacio. En la cabecera del hunk, @@ -12,7 +12,8 @@ significa que el hunk empieza en la línea 12 y cubre 7 líneas en el original y 8 en el archivo modificado.

--- original
+++ modified
@@ -12,7 +12,8 @@ export function useUser(userId) {
   const [data, setData] = useState(null);
-  const [loading, setLoading] = useState(false);
+  const [loading, setLoading] = useState(true);
+  const [error, setError] = useState(null);

06Cómo se ve un cambio

Un valor de configuración modificado

Entrada

timeout = 30
retries = 3
log_level = "info"

Salida

  timeout = 30
- retries = 3
+ retries = 5
- log_level = "info"
+ log_level = "debug"

Una refactorización, con el ruido de espacio eliminado

Entrada

const total = items.reduce((sum, item) => sum + item.price, 0)

Salida

const total = items
  .filter((item) => item.active)
  .reduce((sum, item) => sum + item.price, 0)

Con Ignore whitespace activado, solo se reporta la línea .filter añadida; las líneas de .reduce separadas no se tratan como una reescritura.

Revisa el espacio antes de dudar de la lógica

Si todas las líneas aparecen como cambiadas, la causa suele ser la indentación o los finales de línea, no el código. Activa Ignorar espacio primero.

07Por qué un diff muestra cambios que no hiciste

Lo que vesCausaAjuste que lo arregla
Todas las líneas cambian tras reformatearSangría de dos o cuatro espacios, o tabuladoresIgnore whitespace
Todas las líneas cambian sin motivo visibleFinales de línea CRLF frente a LFIgnore whitespace, o normaliza los finales de línea
Código idéntico marcado como distintoEspacios finales añadidos por el editorIgnore whitespace
Una constante renombrada en todas partesUn cambio solo de mayúsculasIgnore case cuando solo quieres cambios estructurales
Un bloque aparece borrado y vuelto a añadirEl código se movióLee la vista unificada antes de asumir una reescritura

Si ninguno de los dos lados está bajo control de versiones, la comparación en el navegador es la única opción. Consulta cómo formatear, validar y minificar JSON para el paso de limpieza que elimina la mayor parte del ruido antes de empezar.

08Fuentes

Preguntas frecuentes

¿Un diff checker es lo mismo que git diff?

La comparación es la misma y la salida respeta el [formato de diff unificado](https://www.gnu.org/software/diffutils/manual/html_node/Unified-Format.html) que imprime [git diff](https://git-scm.com/docs/git-diff). git diff trabaja sobre archivos dentro de un repositorio, mientras que esta herramienta compara dos bloques cualesquiera de texto, incluso contenido que no está en control de versiones.

¿Puedo comparar dos archivos JSON?

Sí, pero si solo difieren en el formato, formatea ambos lados primero o activa Ignore whitespace; de lo contrario cada línea reindentada se reportará como un cambio.

¿La herramienta detecta líneas movidas?

No. Un bloque movido se reporta como una eliminación más una adición, porque el diff de líneas compara posiciones. Coincide con el modelo de git y es lo que espera la mayoría de quien revisa.

¿Qué tamaño de texto puedo comparar?

No hay límite de servidor, pero el diff se ejecuta en el navegador. Los archivos de hasta unos pocos megabytes se comparan sin problema; para logs enormes, filtra antes por rango de tiempo.

¿Puedo deshacer una comparación?

Swap Sides invierte la dirección y Clear All vacía ambos paneles. La comparación en sí no se almacena.

¿Se sube mi texto?

No: ambos paneles y la comparación se quedan en tu navegador.

Volver a los artículos

Artículos relacionados

Herramientas relacionadas