2017-09-19 7 views
0

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

0

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 et SECOND_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 et SECOND_COMMIT, à l'exception des modifications apportées aux autres fichiers introduits par une autre branche au MERGE_COMMIT. La phrase précédente signifie que si un fichier a été modifié à la fois en SECOND_COMMIT et en MERGE_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