Texto

Como comparar duas versões de um texto, linha por linha

Cole as duas versões, deixe a ferramenta alinhá-las e aprenda a ler os pontos em que o alinhamento está adivinhando.

Para comparar dois textos, cole a versão antiga e a nova em uma ferramenta de diff: ela alinha as duas e marca cada linha como inalterada, removida ou adicionada, com as palavras alteradas destacadas dentro da linha. Comparar as duas no navegador leva uns dez segundos. O que vale a pena saber é onde o alinhamento erra, porque um diff compara caracteres, não significado, e vai dizer, sem o menor constrangimento, que duas linhas que você não consegue diferenciar são diferentes.

Como rodar a comparação

Versão antiga na caixa de cima, versão nova na de baixo. Não há seletor de arquivos, então um arquivo precisa ser aberto em um editor e ter o conteúdo colado aqui. A comparação roda uma fração de segundo depois que você para de digitar, e quatro contadores aparecem abaixo do título do resultado: linhas adicionadas, linhas removidas, linhas inalteradas e uma porcentagem de similaridade. Abaixo deles está o texto alinhado, com as remoções em fundo vermelho e as adições em fundo verde.

Ocultar linhas sem alterações justifica a caixinha na hora. Ela recolhe tudo menos as mudanças e três linhas de contexto de cada lado, que é a diferença entre ler o diff de um documento de 900 linhas e rolar o documento inteiro. O botão Inverter lados conserta o erro muito comum de colar as versões na ordem errada, que transforma cada adição em remoção e faz tudo ser lido ao contrário.

As três opções de ignorar — maiúsculas, espaços no início e no fim, linhas em branco — silenciam diferenças que você já decidiu que não contam. Ligue cada uma de propósito: todas escondem mudanças reais junto com o ruído.

Por que um diff precisa adivinhar

O caminho óbvio seria percorrer os dois textos lado a lado e marcar cada posição em que eles discordam. Isso quebra na primeira inserção. Acrescente uma linha no topo e cada linha restante passa a ficar uma posição abaixo da sua gêmea, então a comparação relata o documento inteiro como reescrito. Tecnicamente correto, completamente inútil.

Por isso um diff de verdade resolve antes um problema mais difícil: achar a sequência mais longa de linhas que aparece, na mesma ordem, nos dois textos. É a maior subsequência comum. Tudo que fica de fora é uma remoção à esquerda ou uma inserção à direita, e o familiar layout vermelho e verde sai desse resultado.

Achar isso custa trabalho. O método de livro-texto preenche uma grade com uma célula por par de linhas, então comparar um documento de 2.000 linhas com outro de 2.000 linhas dá quatro milhões de células. O padrão do Git é o algoritmo de Myers — Eugene Myers, “An O(ND) Difference Algorithm and Its Variations”, 1986 —, cujo custo cresce com o número de diferenças, e não com o produto dos tamanhos dos dois arquivos. É por isso que git diff é instantâneo em um repositório onde você mudou três linhas.

A ferramenta daqui usa a grade, com um atalho que faz quase todo o trabalho: as linhas idênticas bem no começo e bem no fim são pareadas antes de a grade ser construída, e no uso normal isso elimina a maior parte do texto. Passando de mais ou menos 1.500 linhas diferentes de cada lado, ela para de tentar alinhar e relata todo o miolo como removido e depois readicionado, com um aviso embaixo dos botões dizendo isso. Nesse ponto o que você quer é uma ferramenta de merge de desktop.

Por que duas linhas de aparência idêntica são marcadas como diferentes

Porque elas não são idênticas. Alguma coisa ali dentro não tem forma visível:

As quebras de linha são o único caso em que você não precisa pensar: o Windows termina as linhas com um retorno de carro mais um avanço de linha e todo o resto usa só o avanço de linha, e a ferramenta normaliza os dois antes de comparar, então um arquivo colado de um editor do Windows não aparece como 100% diferente só por causa disso.

Para o resto, “ignorar espaços no início e no fim” elimina a primeira causa com um clique — mas também esconde mudanças de indentação, e em Python, YAML ou num Makefile a indentação é a mudança que você estava caçando. Quando uma linha é marcada e, mesmo depois disso, você não vê por quê, a diferença está dentro da linha, e os caracteres invisíveis que quebram o texto mostra como descobrir qual é.

Como comparar um texto sem quebras de linha?

Primeiro você coloca quebras de linha nele. Um diff baseado em linhas não tem nada a dizer sobre um documento que é uma linha só bem longa: mude um caractere no meio de um JSON minificado e o resultado é “1 removida, 1 adicionada” com o bloco inteiro destacado, o que não te diz nada que você já não soubesse.

Para JSON, XML ou JavaScript minificado, formate os dois lados antes de comparar. Passar cada versão por um formatador de JSON coloca cada chave na própria linha, e o diff então aponta para os três campos que de fato mudaram em vez do objeto inteiro. A indentação precisa bater nos dois lados, então use a mesma configuração duas vezes — senão todas as linhas ficam diferentes. Formatar e ler JSON minificado cobre o resto disso.

Para prosa, o truque equivalente é quebrar cada frase na própria linha nas duas versões antes de colar. Um diff de dois capítulos em que cada parágrafo é uma linha só vai marcar o parágrafo como alterado quando tudo o que você corrigiu foi uma vírgula dentro dele. O destaque por palavra ameniza isso, mas é uma frase por linha que torna o resultado legível.

Comparar duas listas que estão em ordens diferentes

Ordene os dois lados do mesmo jeito primeiro, depois compare. Um diff se importa com a ordem, então duas exportações dos mesmos 400 registros em sequências diferentes voltam como quase totalmente alteradas mesmo que o conteúdo bata. Ordenar reduz isso às adições e remoções de verdade — quais linhas estão em um arquivo e não no outro.

Isso só funciona quando a ordem não carrega significado. Um ranking, um changelog ou uma sequência de passos perdem o sentido quando são ordenados. E se alguma das listas tiver repetições, remova-as antes, ou uma duplicata em um lado só desloca tudo o que vem depois.

O que a porcentagem de similaridade mede

Linhas inteiras, e só linhas inteiras: as linhas inalteradas contadas duas vezes, divididas pela contagem de linhas somada dos dois textos. Serve como conferência rápida — 3% quer dizer que você provavelmente colou a coisa errada — e nada além disso.

Ela é implacável de um jeito específico. Mude uma palavra em cada linha e a similaridade marca 0%, porque nenhuma linha sobreviveu intacta, mesmo que os textos sejam 99% iguais por qualquer medida humana. Uma porcentagem baixa quer dizer que as linhas se mexeram, não que o texto esteja irreconhecível.

O que um diff não pega

O destaque por palavra tem a própria ressalva. Ele pareia a primeira linha removida com a primeira inserida, a segunda com a segunda, puramente por posição, então reescrever um parágrafo e reordenar as frases dele transforma o pareamento em ruído. A ferramenta se recusa a destacar quando duas linhas pareadas compartilham menos de cerca de um terço dos caracteres, o que pega o pior dos casos. Quando o destaque ainda parecer errado, desligue e leia as linhas inteiras.

Como tirar o resultado dali

O botão de copiar produz o formato que todo mundo reconhece — um mais, um menos ou um espaço no início de cada linha — que cola limpo em um comentário de revisão ou em uma mensagem de chat. Ele copia a comparação inteira, incluindo as linhas inalteradas que estavam recolhidas na tela, então um documento longo sai longo do mesmo jeito. Não é um arquivo de patch: sem cabeçalhos de hunk @@, sem nomes de arquivo, então patch e git apply vão recusar. Gere um de verdade com git diff.

O comparador de textos daqui faz tudo isso em uma página só — as duas caixas, as opções de espaços e maiúsculas, o destaque por palavra e um número de similaridade — sem o texto sair do seu navegador, o que importa quando as duas versões são um contrato ou a carta médica de alguém. Cole, leia, feche a aba.

Se o diff insiste que uma linha mudou e você já leu seis vezes sem achar a diferença, o culpado é quase sempre um caractere sem forma visível. Os caracteres invisíveis que quebram seu texto lista os suspeitos de sempre e como se livrar deles.

Perguntas frequentes

Como eu comparo dois textos para ver as diferenças?

Cole o original em uma caixa de uma ferramenta de diff e a versão nova na outra. A ferramenta alinha as duas e marca cada linha como inalterada, removida ou adicionada, destacando as palavras específicas que se moveram dentro de uma linha alterada. Para documentos longos, ligue a opção que oculta as linhas inalteradas para sobrarem só as mudanças e algumas linhas de contexto.

Por que um diff diz que duas linhas são diferentes se elas parecem iguais?

Há um caractere invisível em uma delas. As causas de sempre são um espaço no fim da linha, um tab no lugar de espaços, um espaço não separável colado de uma página web, uma aspa tipográfica do autocorretor ou uma letra sósia de outro alfabeto. Ligar “ignorar espaços no início e no fim” elimina a primeira; o resto exige olhar a linha de perto.

Dá para comparar dois documentos do Word ou PDFs?

Só o texto deles, e só copiando e colando. A formatação, o controle de alterações, os comentários, as tabelas e as imagens se perdem no processo, então a comparação cobre as palavras e nada mais. O Word de desktop tem o próprio recurso Comparar na aba Revisão, que preserva tudo isso, e é a melhor opção para um contrato.

É seguro colar texto confidencial em uma ferramenta de diff online?

Depende inteiramente de o site enviar ou não o seu texto para um servidor. Muitos enviam, o que significa que uma minuta de contrato ou a carta de um paciente acaba no log de outra pessoa. Ferramentas que comparam no navegador nunca transmitem nada, e você pode verificar isso desconectando da rede e conferindo que a ferramenta continua funcionando.

Como eu comparo duas listas que estão em ordens diferentes?

Ordene as duas listas do mesmo jeito antes de comparar. Um diff é sensível à ordem, então duas exportações dos mesmos registros em sequências diferentes voltam como quase totalmente alteradas. Com os dois lados ordenados, o diff mostra só as entradas que existem em uma lista e não na outra.

Dá para usar a saída de uma ferramenta de diff como arquivo de patch?

Normalmente não. Um diff copiado costuma trazer os prefixos de mais e menos, mas nenhum cabeçalho de hunk nem nome de arquivo, então patch e git apply vão recusar. Ele serve para colar em um comentário de revisão ou em uma mensagem; use git diff quando precisar de um patch que realmente se aplique.

Última atualização 19 de setembro de 2026