Oui, il y a --no-ff
. Vous pouvez configurer les options de fusion par branche, par ex.
git config branch.master.mergeoptions "--no-ff"
ajoute les éléments suivants à votre $(REPO)/.git/config
fichier :
[branch "master"]
mergeoptions = --no-ff
Note de bas de page : en parlant de mon expérience, j'ai finalement trouvé que la désactivation de l'avance rapide était surtout utile pour les nouveaux venus dans git - cependant, une fois que l'on commence à sentir les flux de travail et les concepts, il faut absolument éviter de brouiller le graphique du journal avec des tonnes de commits inutiles du type 'merged remote ..blarf'.
Note de bas de page 2, une décennie plus tard : les autres réponses ci-dessous fournissent des options de configuration plus modernes, mais vraiment, vous voulez probablement VRAIMENT rester avec les valeurs par défaut (c.-à-d. avancer rapidement quand c'est possible) à notre époque, parce que les merge-commits vides ne font que rendre l'historique beaucoup plus difficile à comprendre.
3 votes
J'utilise
merge
tout le temps pour les branches qui n'ont pas fait de commits depuis leur télécommande afin de les faire avancer rapidement. Cela semble être la façon la plus simple et la plus sûre de le faire. Je suis curieux, vous avez évidemment un cas d'utilisation. Pourquoi voudriez-vous créer un commit de fusion lorsqu'il n'y a pas de commits d'un côté de la branche ?12 votes
J'utilise les branches pour créer un regroupement logique de commits. Ainsi, si je fais une fusion, c'est essentiellement un moyen de dire "ces commits vont ensemble". On peut presque y penser comme à un pauvre homme interactif rebase et squash :-)
14 votes
La désactivation de l'avance rapide est extrêmement utile, en particulier lorsque vous suivez un modèle tel que Un modèle de branchement Git réussi
2 votes
Veuillez remplacer la réponse acceptée par la réponse d'Eric Platon. stackoverflow.com/a/6810687/3408 - J'ai suivi les étapes de la réponse acceptée, puis je me suis rendu compte que cela ne concernait que la branche principale du dépôt actuel, ce qui est stupide.
0 votes
@Steiny Non, ça ne fait que mettre le désordre dans votre référentiel : endoflineblog.com/gitflow-considered-harmful .
5 votes
@jpmc26 Chacun son truc je suppose. Il se trouve que je ne suis pas d'accord avec cet article. Trouver les deux parents d'un commit de fusion n'est pas difficile et vous indique exactement quels étaient les changements. Ensuite, vous pouvez prendre ces changements et faire un "rebase sur" une autre branche. Avec le modèle plat, vous devez trouver et sélectionner manuellement les modifications. Nous avons choisi d'adopter le branchement. Bien sûr, c'est complexe lorsqu'on regarde l'arbre entier, mais c'est la réalité, de multiples changements se produisant en parallèle. Tout aplatir ne fait que masquer ce qui s'est réellement passé.
0 votes
@Steiny Oui, ça cache "ce qui s'est vraiment passé". Et c'est une bonne chose. Il supprime les détails non pertinents dont personne n'a besoin de se soucier et préserve ceux qui sont importants ; c'est ce que fait une bonne documentation. Trouver le parent d'une fusion unique n'est pas difficile, c'est vrai. Retracer 100 commits sur 4 branches avec beaucoup de croisements pour essayer de comprendre ce qui a réellement changé et où, ne semble pas particulièrement facile, surtout quand ces commits peuvent ou non introduire des changements dans le code de base. (C'est ce que recommande/exige Gitflow).
3 votes
@jpmc26 Vous faites des affirmations très fortes et partiales, vous avez littéralement dit "Non, ça fait juste un gâchis de votre référentiel" concernant cet article. nvie.com/posts/a-successful-git-branching-model Bien que ce flux de travail Git puisse ne pas vous convenir, il fonctionne pour certaines équipes d'entreprise.
0 votes
Je comprends que git config modifie les paramètres par utilisateur. Existe-t-il un moyen de désactiver l'avance rapide pour le dépôt (pour tous les utilisateurs), créant ainsi une sorte de "politique de fusion du dépôt" ?