Como posso evitar que o git pense que fiz uma renomeação

Eu tenho dois arquivos index.html e template.html . Mudei a maior parte do index.html para o template.html e agora o git pensa que eu fiz uma renomeação quando adicionei os dois arquivos. É possível evitar isso em casos específicos?

Há uma resposta “aceita”, mas não dá nenhuma pista sobre como responder à pergunta.

A resposta correta, do git-log (1) e do git-diff (1) é:

  --no-renames Turn off rename detection, even when the configuration file gives the default to do so. 

Por que o Git pensa que seus arquivos são cópias

Git rastreia conteúdo , não nomes de arquivos. Como resultado, se dois arquivos tiverem conteúdo substancialmente semelhante, o git pensará que você copiou ou renomeou o arquivo. Se você ler o git-log (1), você aprenderá:

O índice de similaridade é a porcentagem de linhas inalteradas e o índice de dissimilaridade é a porcentagem de linhas alteradas. É um inteiro arredondado, seguido por um sinal de porcentagem. O valor do índice de similaridade de 100% é, portanto, reservado para dois arquivos iguais, enquanto 100% de dissimilaridade significa que nenhuma linha do arquivo antigo foi convertida no novo.

Então, supondo que seu índice de similaridade seja 100%, o git pensará que é uma cópia. Sua melhor aposta é adicionar uma mensagem de log ou nota sensata (veja git-notes (1) para mais sobre isso) para explicar o que está acontecendo se você não acha que o git está fazendo a coisa certa.

Ajustando o Índice de Similaridade

Você também pode tentar ajustar os valores usados ​​por git para considerar algo como uma cópia ou renomear. O manual do git-log (1) diz:

 -M[], --find-renames[=] If generating diffs, detect and report renames for each commit. For following files across renames while traversing history, see --follow. If n is specified, it is a threshold on the similarity index (ie amount of addition/deletions compared to the file's size). For example, -M90% means git should consider a delete/add pair to be a rename if more than 90% of the file hasn't changed. -C[], --find-copies[=] Detect copies as well as renames. See also --find-copies-harder. If n is specified, it has the same meaning as for -M. 

Novamente, isso não ajudará se os arquivos forem semelhantes, mas você certamente pode usar esses valores para ajustar o quão semelhantes eles precisam ser para serem considerados cópias ou renomeações. Sua milhagem pode variar.

Se você está em um momento antes de um commit e “você se sente mal que git enlouqueceu”, então apenas desfaça a adição do arquivo ambíguo git que você renomeou, realize um commit, então adicione o arquivo ambíguo novamente e efetue o commit:

 git reset ambiguous_file_git_thought_you_renamed git commit git add ambiguous_file_git_thought_you_renamed git commit 

Isso funcionou para mim.

Verificação dupla sem renomeação:

 git diff --name-status -C HEAD^^ HEAD M ambiguous_file_git_thought_you_renamed M original_file 

“M” no começo significa modificado, “R” significa Renomeado. Observe que não existe Renamed aqui.

Para contornar git pensando é uma renomeação em “um” commit.

  1. Encene e confirme suas alterações que não acionam a renomeação incorreta
  2. git commit --amend os arquivos restantes que fizeram o git pensar que foi renomear e confirmar com git commit --amend