299 votes

Puis-je faire en sorte que l'avance rapide soit désactivée 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 je veux qu'un commit apparaisse. Y a-t-il un moyen de configurer git pour que l'avance rapide soit désactivée par défaut ? Le fait qu'il y ait un --ff semble impliquer qu'il existe un moyen, mais je ne le trouve pas dans la documentation.

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

377voto

Eric Platon Points 1784

Il semble qu'il y ait encore 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 ce qui suit :

git config --add merge.ff false

...pour qu'elle s'applique à toutes les branches du référentiel actuel. Pour qu'elle s'applique à toutes les branches du tous les référentiels où quelqu'un a pas l'exécuter sans le --global (les paramètres locaux prévalent sur les paramètres globaux), exécutez ceci :

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

De la documentation :

merge.ff
Par défaut, git ne crée pas de commit de fusion supplémentaire lorsqu'il fusionne un commit qui est un descendant du commit courant. Au lieu de cela, l'extrémité de la branche courante est accélérée. Lorsqu'elle prend la valeur false, cette variable indique à git de créer un commit de fusion supplémentaire dans ce cas (ce qui équivaut à donner à la variable --no-ff de la ligne de commande). Lorsqu'elle est définie à seulement, seules ces fusions rapides sont autorisées (ce qui équivaut à donner à l'option --ff-only de la ligne de commande).

18 votes

Note : merge.ff a été introduit dans Git 1.7.6. Elle n'est pas effective dans les versions antérieures.

2 votes

Pour les personnes utilisant Git 1.7.6, c'est la solution la plus simple et la meilleure.

23 votes

Je l'utilise avec un alias. puff = "pull --ff --ff-only"

304voto

conny Points 4475

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.

161 votes

Apprendre git, c'est un peu comme faire de l'alpinisme ; mais au lieu de commencer par de petites falaises et de progresser vers des plus difficiles, git vous fait escalader la même montagne encore et encore, pour tomber à des hauteurs différentes à chaque fois, chaque fois tout aussi surpris que la bouée de sauvetage ne soit pas attachée.

5 votes

Cela affecte-t-il "git pull" et sa stratégie de fusion ?

12 votes

Thomas : Oui ; git pull est git fetch + git merge .

31voto

bastian Points 519

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

J'ai également constaté que ce réglage évite les problèmes lors du tirage.

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

-1voto

Eh bien, ça marche, 10 ans plus tard :D

git config --merge.ff no

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X