¿Cómo puedo solucionar esta advertencia de Git? "Se desaconseja tirar sin especificar cómo conciliar ramas divergentes"
Después de un git pull origin master
, recibo el siguiente mensaje:
warning: Pulling without specifying how to reconcile divergent branches is
discouraged. You can squelch this message by running one of the following
commands sometime before your next pull:
git config pull.rebase false # merge (the default strategy)
git config pull.rebase true # rebase
git config pull.ff only # fast-forward only
You can replace "git config" with "git config --global" to set a default
preference for all repositories. You can also pass --rebase, --no-rebase,
or --ff-only on the command line to override the configured default per
invocation.
remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 4 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (4/4), 51.49 KiB | 850.00 KiB/s, done.
El intento parece exitoso, pero no estoy seguro.
¿Qué puedo hacer para arreglar esto?
En su modo predeterminado, git pull es la abreviatura de git fetch seguido de git merge FETCH_HEAD.
Cuando haces un git pull origin master
,
git pull
realiza una fusión, lo que a menudo crea una confirmación de fusión. Por lo tanto, de forma predeterminada, extraer datos desde el control remoto no es una operación inofensiva: puede crear un nuevo valor hash SHA de confirmación que no existía antes. Este comportamiento puede confundir al usuario, porque lo que parece ser una operación de descarga inofensiva en realidad cambia el historial de confirmaciones de manera impredecible.
Para evitar esto, es necesario
git pull --ff-only
(¿O no? Sigue leyendo para ver cuál se ajusta a tus necesidades)
Con git pull --ff-only
, Git actualizará su rama sólo si se puede "avanzar rápidamente" sin crear nuevas confirmaciones. Si esto no se puede hacer, git pull --ff-only
simplemente se cancela con un mensaje de error.
Puedes configurar tu cliente Git para que lo use siempre --ff-only
de forma predeterminada, de modo que obtengas este comportamiento incluso si olvidas el indicador de la línea de comandos:
git config --global pull.ff only
Nota: La --global
bandera aplica el cambio a todos los repositorios de su máquina. Si desea este comportamiento solo para el repositorio en el que se encuentra, omita la marca.
Tomado de aquí
Esta advertencia se agregó en Git 2.27.
Así es como se ve la advertencia completa:
Se desaconseja tirar sin especificar cómo conciliar ramas divergentes. Puede silenciar este mensaje ejecutando uno de los siguientes comandos en algún momento antes de su siguiente extracción:
git config pull.rebase false # merge (la estrategia predeterminada)
git config pull.rebase true # rebase
git config pull.ff only # fast-forward only
Puede reemplazar "git config" con "git config --global" para establecer una preferencia predeterminada para todos los repositorios. También puede pasar --rebase, --no-rebase o --ff-only en la línea de comando para anular el valor predeterminado configurado por invocación.
La advertencia presenta tres comandos como opciones, todos ellos suprimirán la advertencia. Pero tienen diferentes propósitos:
git config pull.rebase false # merge (the default strategy)
Esto mantiene el comportamiento predeterminado y suprime la advertencia.
git config pull.rebase true # rebase
En realidad, esto se confirma encima de la rama remota, manteniendo una única rama tanto local como remotamente (a diferencia del comportamiento predeterminado donde están involucradas dos ramas diferentes, una local y otra remota, y, para combinar las dos, se realiza una fusión). ).
git config pull.ff only # fast-forward only
Esto solo realiza la extracción si la sucursal local puede avanzar rápidamente. De lo contrario, simplemente aborta con un mensaje de error (y no crea ninguna confirmación).
Actualización 1:
Si tiene Git 2.29 o superior, ahora puede configurarlo en o pull.ff
para false
deshacerse de la advertencia.true
only
git config pull.ff true
true
- Este es el comportamiento estándar. La extracción se adelanta rápidamente si es posible; de lo contrario, se fusiona.
git config pull.ff false
false
- La extracción nunca avanza rápidamente y siempre se crea una combinación.
git config pull.ff only
only
- La extracción se adelanta rápidamente si es posible; de lo contrario, la operación se cancela con un mensaje de error.
Actualización 2:
hubo un error en esta característica recientemente implementada hasta la versión 2.35
en la que Git mostraba esta advertencia incluso si el usuario pasaba una de las tres banderas con el git pull
comando. Esto ya se ha solucionado, considere actualizar su Git a una versión 2.36
o superior.
Notas:
Lea esta respuesta muy bien escrita de Torek para tener una idea mucho más clara de lo que realmente sucede detrás de escena y comprender qué opción es la más adecuada para usted.
Es posible que desee estar atento a la respuesta de VonC aquí para obtener actualizaciones sobre los cambios realizados en esta función en futuras actualizaciones.
Esta es una nueva advertencia agregada en Git 2.27 :
* "git pull" issues a warning message until the pull.rebase
configuration variable is explicitly given, which some existing
users may find annoying---those who prefer not to rebase need to
set the variable to false to squelch the warning.
Para eliminar la advertencia, establezca uno de los valores sugeridos en su comportamiento predeterminado preferido git pull
si no especifica el comportamiento en la línea de comando (usando --ff
, --no-ff
, --ff-only
, --rebase
). En todos los casos, git
intentaremos una fusión de avance rápido (¿ Qué es git fast-forwarding? ) si es posible. La configuración controla lo que sucede cuando hay cambios en su sucursal pero no están presentes en la sucursal remota.
git config pull.rebase false # merge (the default strategy)
Este es el comportamiento predeterminado existente; configúrelo para que no haya advertencias ni cambios de comportamiento; git
fusionará la sucursal remota con la local.
git config pull.rebase true # rebase
Aquí, git
intentaremos cambiar la base de sus cambios en la parte superior de la rama remota. Consulte ¿Cuándo debo usar git pull --rebase? para obtener más detalles sobre por qué es posible que desee eso.
git config pull.ff only # fast-forward only
Si no es posible realizar una fusión rápida, git
se negará a continuar. Como diferencia entre git pull --rebase y git pull --ff-only comillas:
Negarse a fusionarse y salir con un estado distinto de cero a menos que el HEAD actual ya esté actualizado o la fusión se pueda resolver como un avance rápido