Comment faire un git diff déplacé ou renommé le fichier?
J'ai déplacé un fichier à l'aide de git mv
. Maintenant, je voudrais faire un diff sur le fichier afin de le comparer avec l'ancien fichier (avec l'ancien, aujourd'hui inexistant nom).
Comment puis-je faire cela?
- Bientôt (git 2.9, en juin 2016), un simple
git diff -- yourRenamedFile
sera suffisant. Voir ma réponse ci-dessous
Vous devez vous connecter pour publier un commentaire.
Vous devez utiliser -M pour laisser git détecter automatiquement les déplacés lors de la comparaison. En utilisant simplement
git diff
comme knittl mentionné ne fonctionne pas pour moi.Donc tout simplement:
git diff -M
devrait le faire.La documentation de ce commutateur est:
~/.gitconfig
?git diff
. L'exécution degit diff -M
sur un seul (renommé) fichier n'est pas signaler 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 suis en cours d'exécutiongit version 2.11.0.windows.1
.-C
option pour la détection de copies est utile et similaires. Je l'ai utilisé avec-M
pour regarder une diff où j'avais refait un fichier en deux (avec pas de nom correspondant à l'original).En plus de ce knittl a écrit, vous pouvez toujours utiliser:
où
HEAD:./oldfilename
signifie paramètreancien_nom_fichier dans le dernier commit (dans la TÊTE) par rapport au répertoire courant.Si vous n'avez pas assez de git, vous devez utiliser à la place:
git diff 39fa7c77e85c51d43ea0cf30d33aec8721812e9e:./oldfilename newfilename
git diff branch:old/filen.name newfilename
cd
à l'annuaire et ne pas ajouter de--
avant lacommit:path
paire. Git semble être très pointilleux avec la syntaxe.<commit-ish>:<pathname>
syntaxe est un identificateur d'objet, quelque chose de Git-ish, après--
Git attend seulement les noms.Avec git 2.9 (juin 2016), vous n'aurez pas à ajouter
-M
plus.git diff
utilise-M
par défaut.Voir s'engager 5404c11, s'engager 9501d19, s'engager a9276a6, s'engager f07fc9e, s'engager 62df1e6 (25 Février 2016) par Matthieu Moy (
moy
).(Fusionnés par Junio C Hamano --
gitster
-- dans s'engager 5d2a30d, 03 Avril 2016)Les nouveaux tests pour cette fonction sont ici.
Pour quelque raison que ce soit à l'aide de
HEAD:./oldfilename
(ou chemin d'accès absolu) n'a pas fonctionné pour moi, maisHEAD:oldfilename
n' (merci cmn):HTH
HEAD:./oldfilename
?git diff -M
active renommer détection comme d'autres l'ont dit (et comme @VonC l'a souligné, il est activé par défaut à partir de git 2.9). Mais si vous avez un grand ensemble de modifications, inexact renommer détection pouvez toujours obtenir éteint de nouveau. Git va afficher un message d'avertissement comme le suivant, qui est facile à manquer au milieu de la diff que vous visionnez:Dans ce cas, réglez l'option de configuration comme suggéré par git, par exemple
et de ré-exécuter votre commande diff.
simplement exécuter
git diff
sans arguments, ougit diff -- newfilename
. git est assez intelligent pour comparer les fichiers/contenu (c'est à dire d'origine contenu avant de le renommer avec un contenu modifié après renommer)git mv
ing un seul fichier, puis en comparant la mise en scène de l'etat à l'autre, sinon identiques branche permettra de produire le "tout a été supprimé et recréé à nouveau" diff sauf-M
est utilisé.