Git: configurar merge.ff se rompe y se fusiona para siempre

Encuentro un problema muy extraño en Git (versión 2.10.1 (Apple Git-78)).

Parece que si alguna vez configuré merge.ff como false en la configuration de repos local, no hay vuelta atrás para este repository. Simplemente no puedo desarmarlo.

Estos son los pasos para reproducirse:

 git init # Set merge.ff git config --add merge.ff false # Add some content and commit. echo '.' >> file.txt git add file.txt git commit -am "commit" # Create a new branch. git branch feature git checkout feature echo '.' >> file.txt git commit -am "commit" git checkout master git merge feature 

Esta fusión crea una confirmación con post, como se esperaba.

Ahora desactivo la configuration, y espero que las futuras enmiendas de avance rápido no creen compromisos adicionales. Pero sorprendentemente, eso no funciona.

 git config --unset-all merge.ff git checkout feature echo '.' >> file.txt git commit -am "commit" git checkout master git merge feature 

merge.ff que esta fusión no debería crear una confirmación, porque no hay configuration de merge.ff , por lo que debería aplicarse el valor pnetworkingeterminado. Pero el compromiso se crea.

Lo que quiero: tener compromisos rápidos para volver a trabajar en mi repository. ¿Hay alguna forma de get esto?

Asumiría que esta fusión no debería crear una confirmación, porque no hay configuration de merge.ff, por lo que debería aplicarse el valor pnetworkingeterminado. Pero el compromiso se crea.

El valor pnetworkingeterminado es avanzar rápidamente si es posible , de lo contrario, realizar una fusión de confirmación.

Ahora es necesario realizar una fusión, ya que el gráfico se ve así:

 * 4667bf7 (feature) commit | * 6663675 (HEAD -> master) Merge branch 'feature' | |\ | |/ |/| * | c12b7b3 commit |/ * 3c62604 commit 

La base de fusión del master y la feature es commit c12b7b3... :

 $ git merge-base master feature c12b7b3f68caf419c3088fae293c57cfed147f34 

y la punta de la feature es 4667bf7 , con la punta del master siendo 6663675 . Ninguno de estos dos consejos es igual a la base de fusión, por lo que se requiere una fusión.

Tu configuration está bien:

 $ git config --get merge.ff $ cat .git/config [core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true [merge] 

(Es bastante desagradable, pero inofensivo, que git config deje una sección falsa [merge] falsa allí; cada git config merge.<whatever> adicional de git config merge.<whatever> agrega otra cuando hay una vacía).