Voici la solution que j'ai trouvée : git merge-tree
fait la fusion "en mémoire" et imprime la différence sans toucher à votre répertoire de travail. Vous pouvez même tester une branche sans la vérifier.
Obtenir le différentiel de fusion
Tout d'abord, faites ceci pour vous assurer que votre référentiel connaît toutes les branches distantes :
$ git fetch --all
Maintenant, utilisez cet extrait de bash pour voir comment se branchez $branch
serait fusionner en $master
:
$ branch='feature'
$ git merge-tree $(git merge-base $branch master) master $branch
Aucune modification n'est apportée à votre répertoire de travail ou à votre index. Il s'agit d'un fusion à sec .
Récupérer les informations de la sortie
La sortie est un différentiel. Dans le cas où la branche a été fusionnée, il sera vide.
Pour savoir s'il y a des conflits, il faut rechercher <<<
:
$ git merge-tree $(git merge-base $branch master) master $branch | fgrep '<<<'
Pour extraire les différences de conflit, utiliser sed
pour extraire des lignes entre <<<
y >>>
:
$ git merge-tree $(git merge-base $branch master) master $branch | \
sed -ne '/^\+<<</,/^\+>>>/ p'
Caractéristiques
- Le diff sera vide si une branche est déjà fusionnée.
- Utilisez grep/sed pour extraire des informations sur les conflits
- Utilice
origin/feature
pour tester des branches avec lesquelles vous n'avez jamais travaillé
- Peut être utilisé pour voir comment 2 branches ont divergé
Ajoutez-le à vos favoris
Obtenir le différentiel de la fusion :
git config --global alias.mergediff '!f(){ branch="$1" ; into="$2" ; git merge-tree $(git merge-base "$branch" "$into") "$into" "$branch" ; };f '
Utilisation :
$ git mergediff <feature-branch> <merge-into>
$ git mergediff feature master
Obtenir des conflits de fusion :
git config --global alias.mergetest '!f(){ git mergediff $@ | sed -ne "/^+<</,/^+>>/ p" ; };f '
Utilisation :
$ git mergetest <feature-branch> <merge-into>
$ git mergetest feature master
2 votes
Voir aussi stackoverflow.com/questions/501407/