web-dev-qa-db-fra.com

Comment tester une fusion sans fusionner d'abord

Existe-t-il un moyen de simuler un git merge entre deux branches, la branche en cours de travail et le maître, mais sans apporter de modification?

J'ai souvent des conflits quand je dois créer un git merge. Existe-t-il un moyen de simuler la fusion en premier?

130
dole doug

Je ne pense pas qu'il y ait un moyen de simuler ce qui se passera jusqu'à ce que vous essayiez la fusion. Cependant, si vous vous assurez que la sortie de git status est vide avant de procéder à la fusion, il est tout à fait sûr de continuer et de l'essayer. Si vous avez des conflits, vous pouvez immédiatement revenir à l'état dans lequel vous vous trouviez auparavant avec:

git reset --merge

Depuis git 1.7.4, vous pouvez également annuler la fusion en faisant:

git merge --abort

(Comme le message de validation qui ajoute cette option explique , cela a été ajouté pour des raisons de cohérence avec git rebase --abort et ainsi de suite.)

109
Mark Longair

Vous pouvez utiliser git merge --no-commit pour empêcher la fusion d'être réellement validée. Si vous n'aimez pas le résultat de la fusion, réinitialisez simplement la tête d'origine.

Si vous ne voulez absolument pas finaliser la fusion, même si c'est une avance rapide (et donc sans conflit, par définition), vous pouvez aussi ajouter --no-ff.

115
Amber

Si je veux comparer les modifications apportées à une branche de sujet à maîtriser, je trouve qu'il est plus simple et plus sûr de procéder comme suit:

git checkout master
git checkout -b trial_merge
git merge topic_branch

Une fois la fusion terminée, il est facile de voir le changement consolidé depuis le modèle principal.

git diff master

Une fois terminé, supprimez simplement la branche trial_merge

git checkout master
git branch -D trial_merge

De cette façon, la branche principale ne change jamais. 

81
Ian

J'utilise :

git merge --ff-only

selon documentation :

Refusez de fusionner et quittez avec un statut différent de zéro sauf si le HEAD actuel est déjà à jour ou si la fusion peut être résolue en avance rapide.

Ce n'est pas vraiment une simulation car il y aura une fusion rapide en cas d'absence de conflit entre les deux branches. Mais en cas de conflit, vous en serez informé et rien ne se passera.

4
Ortomala Lokni

J'ai pu utiliser git merge --abort, récemment. Cependant, cela ne peut être utilisé qu'en cas de conflit de fusion. Si vous êtes sûr de ne pas vouloir vous engager, utilisez les autres méthodes mentionnées ci-dessus.

4
bean5

Pourquoi ne pas simplement créer une branche jetable (git checkout -b) et faire un test de fusion là-bas?

3
Mohan S Nayaka

Je ne sais pas exactement si c'est votre cas, mais votre question me rappelle que parfois, je commence une fonction, je m'engage au fil des jours et je la fusionne plusieurs fois. 

Sur ce point, je perds le contrôle sur les fichiers que j'ai modifiés et je ne le saurai que lorsque ma fonctionnalité sera fermée et que mon code va se développer.

Dans ce cas, l'utilisation de Sourcetree est un bon moyen de savoir quelles modifications vous avez apportées (aucune autre des fusions).

Vous devez cliquer avec le bouton droit sur la branche de base et sélectionner Diff Against Current:

 Sourcetree's feature to know the diff between two branches

Ensuite, sourcetree vous montrera toutes les modifications qui seront fusionnées si vous fusionnez votre branche en branche de base.

 Results

Bien sûr, cela ne vous montrera pas les conflits, mais c’est un outil utile dans les fusions.

0
Lucas Amorim Silva