Existe-t-il un moyen d'obtenir meld
+ git
pour afficher les modifications intervenues entre 2 validations git, mais exclure les modifications introduites dans une 3ème validation? Le cas d'utilisation consiste à voir à quel point la validation actuelle diffère de certaines validations effectuées avant une fusion à trois voies.Diff entre 2 validations git sauf contenues dans la 3ème validation
Répondre
J'ai une manière hacky de faire cela.
Avertissement: Avant d'utiliser une seule doublure ci-dessous, mieux valider/sauvegarder toutes vos modifications non validées. Ce seul paquebot essaie de cacher et de restaurer vos changements. Mais il peut encore introduire un certain encombrement (nouveaux fichiers) au repo ou peut contenir un bug
Le code ci-dessous montre un diff entre FIRST_COMMIT
et SECOND_COMMIT
sauf modifications à d'autres fichiers introduits par une autre branche dans MERGE_COMMIT
. Vous devez définir les variables d'environnement FIRST_COMMIT
, SECOND_COMMIT
et MERGE_COMMIT
aux valeurs appropriées.
FIRST_COMMIT=866dfa2a7
MERGE_COMMIT=94b195989
SECOND_COMMIT=0fc856fd9
git stash ; \
git checkout $FIRST_COMMIT ; \
git ls $MERGE_COMMIT..$SECOND_COMMIT | sort | \
uniq | \
xargs -L 1 git checkout $SECOND_COMMIT -- ; \
git difftool -d $FIRST_COMMIT ; \
git stash && git stash drop ; \
git stash apply
Qu'est-ce que ce single-liner fait:
- met des modifications non validées locales à git
stash
- chèques état de code à
FIRST_COMMIT
- prend tous les fichiers modifiés à
MERGE_COMMIT
etSECOND_COMMIT
et toutes les révisions entre eux - chaque fichier de l'étape précédente est réinitialisé à son état au
SECOND_COMMIT
- affiche diff en utilisant l'outil diff que vous avez configuré pour git. Le diff serait compris entre
FIRST_COMMIT
etSECOND_COMMIT
, à l'exception des modifications apportées aux autres fichiers introduits par une autre branche auMERGE_COMMIT
. La phrase précédente signifie que si un fichier a été modifié à la fois enSECOND_COMMIT
et enMERGE_COMMIT
, tous les changements seront présents à diff. C'est difficile d'éviter ça. - Après avoir quitté votre outil de diff, git supprime les modifications temporaires et vérifie la branche sur laquelle vous avez travaillé.
- Après cela, les changements de git stash seront appliqués.
En fonction de votre flux de travail git preferred, vous pouvez décider de supprimer les appels git stash de simple doublure au-dessus