web-dev-qa-db-fra.com

Puis-je désactiver le transfert rapide par défaut dans git?

Je ne peux pas vraiment penser à un moment où j'utiliserais git merge plutôt que git rebase et pas veulent avoir un commit affiché. Est-il possible de configurer git pour avoir un transfert rapide par défaut? Le fait qu'il y a un --ff _ semble impliquer qu'il existe un moyen, mais je n'arrive pas à le trouver dans la documentation.

251
Jason Baker

Oui, il y a --no-ff. Vous pouvez configurer les options de fusion par branche, par exemple.

git config branch.master.mergeoptions  "--no-ff"

ajoute ce qui suit à votre fichier $(REPO)/.git/config:

[branch "master"]
    mergeoptions = --no-ff

Note de bas de page: parlant de mon expérience, j’ai finalement trouvé que passer à la vitesse supérieure était surtout utile pour les nouveaux venus chez git. Toutefois, une fois que la notion de flux de travail et de concepts commence à s’imprégner, vous voulez absolument éviter de brouiller votre graphique de journal avec des tonnes de type '..blarf' confondu distant fusionné.

267
conny

Il semble qu’il reste une question en suspens dans le fil de discussion: comment le faire globalement (c’est-à-dire pour toutes les branches)? Pour les enregistrements, nous pouvons utiliser les éléments suivants:

git config --add merge.ff false

... pour l'appliquer à toutes les branches du référentiel actuel. Pour l'appliquer à toutes les branches de de tous les référentiels où quelqu'un a pas exécutez-le sans l'option --global (les paramètres locaux remplacent les paramètres globaux), exécutez la commande suivante:

git config --global --add merge.ff false

De la documentation :

merge.ff
Par défaut, git ne crée pas de validation de fusion supplémentaire lors de la fusion d'une validation qui est un descendant de la validation actuelle. Au lieu de cela, la pointe de la branche actuelle est transférée rapidement. Lorsqu'elle est définie sur false, cette variable indique à git de créer une validation de fusion supplémentaire dans ce cas (équivalent à l'option --no-ff À partir de la ligne de commande). Lorsque cette option est définie sur uniquement, seules les fusions en avance rapide sont autorisées (ce qui revient à donner l'option --ff-only À partir de la ligne de commande).

326
Eric Platon

En lisant le fil des réponses, j'ai fini par utiliser les deux options suivantes

git config --global pull.ff only # Disallows non ff merges on pull. Overrides merge.ff when pulling
git config --global merge.ff false # even create extra merge commit when fast forward merge would be possible

Seulement vaguement lié, j'ai aussi trouvé que ce réglage évite les problèmes pendant le tirage

git config --global pull.rebase # set up pull to rebase instead of merge
10
bastian