¿Puedo desactivar el avance rápido de forma predeterminada en Git?
Realmente nunca puedo pensar en un momento en el que usaría git merge
en lugar de git rebase
y no quisiera que apareciera una confirmación. ¿Hay alguna forma de configurar Git para que tenga desactivado el avance rápido de forma predeterminada?
El hecho de que haya una --ff
opción parece implicar que hay una manera, pero parece que no puedo encontrarla en la documentación.
Parece que todavía hay una pregunta pendiente en el hilo: ¿Cómo hacerlo globalmente (es decir, para todas las ramas)? Para los registros, podemos utilizar lo siguiente:
git config --add merge.ff false
...para que se aplique a todas las sucursales en el repositorio actual. Para que se aplique a todas las ramas en todos los repositorios donde alguien no lo haya ejecutado sin la --global
opción (la configuración local anula la global), ejecute esto:
git config --global --add merge.ff false
De la documentación :
merge.ff
De forma predeterminada, git no crea una confirmación de fusión adicional cuando se fusiona una confirmación que es descendiente de la confirmación actual. En cambio, se avanza rápidamente la punta de la rama actual. Cuando se establece en falso, esta variable le dice a git que cree una confirmación de fusión adicional en tal caso (equivalente a dar la--no-ff
opción desde la línea de comando). Cuando se establece en solo, solo se permiten fusiones de avance rápido (equivalente a dar la--ff-only
opción desde la línea de comando).
Sí hay --no-ff
. Puede configurar opciones de fusión por rama, por ejemplo
git config branch.master.mergeoptions "--no-ff"
agrega lo siguiente a su $(REPO)/.git/config
archivo:
[branch "master"]
mergeoptions = --no-ff
Nota al pie: hablando de mi experiencia, finalmente descubrí que desactivar el avance rápido era muy útil para los recién llegados a git; sin embargo, una vez que la sensación de los flujos de trabajo y los conceptos comienza a asimilarse, definitivamente querrás evitar que tu gráfico de registro se vuelva borroso con toneladas de elementos fusionados sin sentido. confirmaciones remotas de tipo ..blarf.
Nota al pie 2, una década después: las otras respuestas a continuación brindan opciones de configuración más modernas, pero en realidad, probablemente SÍ quieras permanecer con los valores predeterminados (es decir, avanzar rápidamente siempre que sea posible) en estos tiempos, porque las confirmaciones de fusión vacías en realidad solo hacer que la historia sea mucho más difícil de razonar.
Al leer el hilo de respuestas, terminé usando las dos opciones siguientes:
# Disallows non ff merges on pull. Overrides merge.ff when pulling
git config --global pull.ff only
# Even create extra merge commit when fast forward merge would be possible
git config --global merge.ff false
Solo en términos generales, también descubrí que esta configuración evita problemas durante la extracción:
# Set up pull to rebase instead of merge
git config --global pull.rebase true
git config --replace-all pull.ff false
El comando anterior funcionó para mí para eliminar la combinación de avance rápido de todas las ramas.