Réponses:
Vous devez utiliser -M pour laisser git détecter automatiquement le fichier déplacé en cas de différence. Utiliser tout git diff
comme knittl mentionné ne fonctionne pas pour moi.
Si simplement: git diff -M
devrait le faire.
La documentation de ce commutateur est:
-M[<n>], --find-renames[=<n>]
Detect renames. If n is specified, it is a threshold on the similarity index
(i.e. 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.
~/.gitconfig
?
git diff
. L'exécution git diff -M
sur un seul fichier (renommé) ne signale pas un changement de nom.
git log --follow -- file_after_move.txt
fonctionne bien. Il montre toute l'histoire, y compris avant le déménagement. Des idées? Je cours git version 2.11.0.windows.1
.
-C
option de détection des copies est utile et similaire. Je l'ai utilisé avec -M
pour regarder un diff où j'avais refactoré un fichier en deux (sans aucun nom correspondant à l'original).
En plus de ce que knittl a écrit , vous pouvez toujours utiliser:
git diff HEAD:./oldfilename newfilename
où HEAD:./oldfilename
signifie ancien nom de fichier dans le dernier commit (dans HEAD), par rapport au répertoire courant.
Si vous n'avez pas assez de nouveau git, vous devrez utiliser à la place:
git diff HEAD:path/to/oldfilename newfilename
git diff 39fa7c77e85c51d43ea0cf30d33aec8721812e9e:./oldfilename newfilename
git diff branch:old/filen.name newfilename
cd
dans le répertoire et ne l'ajoutez pas --
avant la commit:path
paire. Git semble être très pointilleux avec la syntaxe ici.
<commit-ish>:<pathname>
syntaxe est un identifiant d'objet, quelque chose de Git-ish; après que --
Git n'attend que les noms de fichiers.
Avec git 2.9 (juin 2016), vous n'aurez plus à en ajouter -M
. git diff
utilise -M
par défaut.
Voir commit 5404c11 , commit 9501d19 , commit a9276a6 , commit f07fc9e , commit 62df1e6 (25 février 2016) par Matthieu Moy ( moy
) .
(Fusionné par Junio C Hamano - gitster
- in commit 5d2a30d , 03 avril 2016)
diff
: activerdiff.renames
par défautLa détection de changement de nom est une fonctionnalité très pratique et les nouveaux utilisateurs ne devraient pas avoir à fouiller dans la documentation pour en bénéficier.
Les objections potentielles à l'activation de la détection de changement de nom sont qu'elle échoue parfois et qu'elle est parfois lente. Mais la détection de renommage est déjà activée par défaut dans plusieurs cas comme "
git status
" et "git merge
", donc l'activationdiff.renames
ne change pas fondamentalement la situation. Lorsque la détection de changement de nom échoue, elle échoue désormais systématiquement entre "git diff
" et "git status
".Ce paramètre n'affecte pas les commandes de plomberie, par conséquent les scripts bien écrits ne seront pas affectés.
git diff -M
active la détection de renommage comme d'autres l'ont dit (et comme @VonC l'a souligné, elle est activée par défaut à partir de git 2.9). Mais si vous avez un grand ensemble de modifications, la détection de changement de nom inexacte peut toujours être désactivée. Git affichera un avertissement comme celui-ci, qui est facile à manquer parmi les différences que vous visualisez:
warning: inexact rename detection was skipped due to too many files.
warning: you may want to set your diff.renameLimit variable to at least 450 and retry the command.
Dans ce cas, définissez l'option de configuration comme suggéré par git, par exemple
git config diff.renamelimit 450
et réexécutez votre commande diff.
Pour une raison quelconque, l'utilisation HEAD:./oldfilename
(ou le chemin absolu) n'a pas fonctionné pour moi, mais HEAD:oldfilename
a fonctionné (merci cmn):
git diff HEAD:oldfilename newfilename
git diff 2a80f45:oldfilename f65f3b3:newfilename
HTH
HEAD:./oldfilename
?
exécutez simplement git diff
sans aucun argument, ou git diff -- newfilename
. git est suffisamment intelligent pour comparer les bons fichiers / contenus (c'est-à-dire le contenu original avant le changement de nom avec le contenu modifié après le changement de nom)
git mv
ingérer un seul fichier et de comparer ensuite l'état par étapes à une autre branche par ailleurs identique produira le diff "tout a été supprimé et recréé" à moins qu'il ne -M
soit utilisé.
git diff -- yourRenamedFile
suffira. Voir ma réponse ci