Dans Git, comment comparer le même fichier entre deux validations différentes (non contiguës) sur la même branche (master par exemple)?
Je recherche une fonctionnalité de comparaison comme celle de Visual SourceSafe (VSS) ou Team Foundation Server (TFS).
Est-ce possible à Git?
..
n'est pas vraiment nécessaire, bien que cela fonctionne avec (sauf dans les versions assez anciennes, peut-être). Vous pouvez également utilisergit log
ougitk
pour trouver des SHA1 à utiliser, si les deux validations sont très éloignées.gitk
a également un "diff sélectionné -> ce" et "diff ce -> sélectionné" dans son menu contextuel.--
est utile, par exemple lorsque vous avez un fichier nommé-p
. Bon à utiliser dans les scripts, seulement dans de rares cas nécessaires dans la pratique.Vous pouvez également comparer deux fichiers différents dans deux révisions différentes, comme ceci:
git diff <revision_1>:<file_1> <revision_2>:<file_2>
la source
<file_1>
et se<file_2>
trouvent dans le répertoire courant, et non dans le répertoire git de niveau supérieur, il faut ajouter un préfixe./
sur Unix:<revision_1>:./filename_1
Si vous avez configuré le "difftool", vous pouvez utiliser
Exemple: comparaison d'un fichier de son dernier commit à son commit précédent sur la même branche: en supposant que si vous êtes dans le dossier racine de votre projet
Vous devriez avoir les entrées suivantes dans votre fichier ~ / .gitconfig ou dans le fichier project / .git / config. Installez le p4merge [Ceci est mon outil de diff et de fusion préféré]
la source
Vérifiez
$ git log
, copiez l' ID SHA-1 des deux validations différentes et exécutez lagit diff
commande avec ces ID. par exemple:la source
git diff (sha-id-one) (sha-id-two) -- filename.ext
sans le nom de fichier, il répertoriera les différences de tous les fichiers de ces deux validations.Si vous souhaitez voir toutes les modifications apportées au fichier entre les deux validations sur une base de validation par validation, vous pouvez également effectuer
git log -u $start_commit..$end_commit -- path/to/file
la source
Voici un script Perl qui imprime les commandes Git diff pour un fichier donné comme dans une commande de journal Git.
Par exemple
Rendements:
qui pourrait ensuite être coupé et collé dans une session de fenêtre shell ou redirigé vers
/bin/sh
.Remarques:
Code:
la source
Si vous voulez faire un diff avec plus d'un fichier, avec la méthode spécifiée par @mipadi:
Par exemple, diff entre
HEAD
et votremaster
, pour trouver tous les.coffee
fichiers:Cela recherchera récursivement
your_search_folder/
tous vos.coffee
fichiers et fera une différence entre eux et leursmaster
versions.la source
Si vous avez plusieurs fichiers ou répertoires et que vous souhaitez comparer les validations non continues, vous pouvez le faire:
Créer une branche temporaire ( "révision" dans cet exemple)
Rembobiner vers la première cible de validation
Cherry picking sur ceux qui s'engagent intéressés
Appliquer diff
Quand tu as fini
la source
Juste une autre façon d'utiliser la génialité de Git ...
la source
difftool-file = "!git difftool HEAD@{\"$2\"} HEAD \"$1\" #"
Si vous voulez une comparaison visuelle simple sur Windows telle que vous pouvez l'obtenir dans Visual SourceSafe ou Team Foundation Server (TFS), essayez ceci:
Remarque: Après la mise à niveau vers Windows 10, j'ai perdu les options du menu contextuel Git. Cependant, vous pouvez réaliser la même chose en utilisant 'gitk' ou 'gitk filename' dans une fenêtre de commande.
Une fois que vous appelez «Git History», l'outil Git GUI démarre, avec un historique du fichier dans le volet supérieur gauche. Sélectionnez l'une des versions que vous souhaitez comparer. Cliquez ensuite avec le bouton droit sur la deuxième version et choisissez soit
Diff this -> sélectionné
ou
Diff sélectionné -> ce
Des différences codées par couleur apparaîtront dans le volet inférieur gauche.
la source