¿Por qué git me solicita un mensaje de confirmación de fusión posterior a la extracción?

142

Recientemente, después de cualquiera git pull, git ha comenzado a generar mi editor de texto y a solicitar un mensaje de confirmación de fusión. Un mensaje de confirmación ya está precargado, y solo tengo que guardar y cerrar la ventana para completar la extracción.

En el pasado, fusionaba en silencio, con un mensaje de confirmación estándar (en la línea de Merge branch 'dev' of remote.com:/repo into dev).

Recientemente actualicé git a la versión 1.7.11.3 (a través de homebrew), pero no puedo pensar en otra cosa que haya hecho para cambiar este comportamiento. ¿Es esta una configuración, o hay alguna otra forma de volver a ser como era?

shanebonham
fuente

Respuestas:

157

En git 1.7.10, los desarrolladores de git decidieron que los commits de fusión se podían hacer con demasiada facilidad. Como se explica en esta publicación de blog, forzar el comportamiento de los mensajes de confirmación interactivos debería hacer que esos mensajes de confirmación sean más detallados y podría reducir la frecuencia general de fusiones innecesarias.

Puede usar la --no-editbandera para evitar este comportamiento, pero, bueno, no lo haga. Los compromisos de fusión, como cualquier compromiso con la historia, deben estar bien construidos. Tu historia no debe ser más que útil.

Christopher
fuente
54
Gracias por la ayuda. Sin embargo, no estoy de acuerdo con que los commits de fusión siempre sean descriptivos. La razón por la que busqué esto es porque las fusiones automáticas cada vez que lo hago me piden que explique por qué la fusión es necesaria, lo que rápidamente se vuelve irracional ya que incluso lo hace cuando no tengo ningún cambio.
Brian
10
Este también es un recurso útil para evitar este comportamiento: longair.net/blog/2009/04/16/git-fetch-and-merge Debe evitar git pull; úselo git merge --ff-onlysi solo está tratando de actualizar y no cree que tenga cambios locales; úselo git merge --no-ffsi realmente está tratando de fusionar una rama.
Glifo
66
¿Hay una bandera de configuración para desactivar esto? Es molesto tener que escribir, no editar todo el tiempo.
LandonSchropp
Increíble. Gracias por compartir @Christopher.
LandonSchropp
3
@SeanCoetzee: Depende de su $EDITORconfiguración, pero si está usando git fuera de la caja en OSX, probablemente sea un programa llamado 'vi' . Escriba ipara ingresar al modo "INSERTAR"; Escribe tu mensaje. Luego puede guardar y salir presionando ESCy luego escribiendo :wq.
Christopher
58

Para crear un acceso directo para uso futuro, ya sea: -

Edite su ~/.gitconfigcon lo siguiente:

[core]
    mergeoptions = --no-edit

O ejecute lo siguiente en Terminal

git config --global core.mergeoptions --no-edit

Dallas Clark
fuente
13
Esto no funcionó para mí (git en OSX), y lo configuré correctamente, mirando la salida de git config --global core.mergeoptions.
jvannistelrooy
el comando de terminal debería ser como se muestra a continuacióngit config core.mergeoptions --no-edit
S. Mert el
@SimsekMert que solo editará el .gitconfig en el repositorio actual, no globalmente para cada repositorio git
Dallas Clark
@AbhishekGoel existe la posibilidad de que deba reiniciar la Terminal para que los cambios surtan efecto
Dallas Clark
@jvannistelrooy existe la posibilidad de que deba reiniciar la Terminal para que los cambios surtan efecto
Dallas Clark
11

Primero, preste atención a las advertencias en la respuesta de Christopher anterior.

Luego, si aún desea deshabilitar la edición automática de mensajes de confirmación de fusión, configure esta variable de entorno:

    GIT_MERGE_AUTOEDIT=no

Esta variable de entorno y su configuración "no" se documentan en la página de documento de git merge . Se recomienda usarlo solo en scripts que necesiten fusionarse de manera no interactiva, pero, por supuesto, se puede configurar como parte de su entorno de shell para que sus efectos sean más permanentes.

emackey
fuente
¿Puedes explicar cómo esto podría ser diferente de usar la --no-editbandera?
Alexander Mills
2
No sé de una diferencia funcional, pero el factor de conveniencia hace que valga la pena. La --no-editbandera tiene que repetirse en la línea de comando con cada uso, ya que no parece funcionar en la configuración como se describe en la respuesta de Dallas Clark aquí. Establecer la variable de entorno es la única forma en que sé hacer que esta configuración se mantenga.
emackey