Saltar al contenido

¿Cómo lidiar con esta advertencia de git? “Se desaconseja tirar sin especificar cómo conciliar ramas divergentes”

Sé libre de compartir nuestro espacio y códigos en tus redes, ayúdanos a aumentar esta comunidad.

Solución:

En su modo predeterminado, git pull es una abreviatura de git fetch seguido de git merge FETCH_HEAD.

cuando haces un git pull origin master,
git pull realiza una fusión, que a menudo crea una confirmación de fusión. Por lo tanto, por defecto, tirar desde el control remoto NO es una operación inofensiva: puede crear un nuevo sha de confirmación que no existía antes. Este comportamiento puede confundir a un usuario, porque lo que parece que debería ser una operación de descarga inofensiva en realidad cambia el historial de confirmaciones de manera impredecible.

Para evitar esto, necesita

git pull --ff-only

(¿o no? sigue leyendo para ver cuál se adapta a tus necesidades)

Con git pull --ff-only, Git actualizará su rama solo si se puede “avanzar rápidamente” sin crear nuevas confirmaciones. Si esto no se puede hacer, git pull --ff-only simplemente aborta con un mensaje de error.

Puede configurar su cliente Git para usar siempre --ff-only de forma predeterminada, por lo que obtiene este comportamiento incluso si olvida el indicador de la línea de comandos:

git config --global pull.ff only

Nota la --global flag aplica el cambio para todos los repositorios en 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, como lo señaló Joe en su respuesta.

Así es como se ve la advertencia completa:

Se desaconseja tirar sin especificar cómo reconciliar las ramas divergentes. Puede silenciar este mensaje ejecutando uno de los siguientes comandos en algún momento antes de su próxima extracción:

git config pull.rebase false # fusionar (la estrategia predeterminada)
git config pull.rebase true # rebase
git config pull.ff solo # solo avance rápido

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 estos suprimirán la advertencia. Pero sirven para 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 en la parte superior de la rama remota, manteniendo una sola rama tanto de forma local como remota (a diferencia del comportamiento predeterminado en el que están involucradas dos ramas diferentes, una en local y otra en 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 rama local se puede avanzar rápidamente. Si no, simplemente aborta con un mensaje de error (y no crea ninguna confirmación).


Actualizar:

Si usted tiene Git 2.29 o superior, ahora puede establecer pull.ff para false, true o only para deshacerse de la advertencia.

git config pull.ff true

true – Este es el comportamiento estándar. La extracción avanza 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 avanza rápidamente si es posible; de ​​lo contrario, la operación se cancela con un mensaje de error.

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 para 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 intentará una combinación de avance rápido (¿Qué es el avance rápido de git?) si es posible. La configuración controla lo que sucede cuando hay cambios en su sucursal, pero no presentes en la sucursal remota.

  git config pull.rebase false  # merge (the default strategy)

Este es el comportamiento predeterminado existente; configure esto para que no haya advertencia y ningún cambio en el comportamiento; git fusionará la sucursal remota con la local.

  git config pull.rebase true   # rebase

Aquí, git intentará volver a basar 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 una combinación de avance rápido, git se negará a proceder. Como diferencia entre git pull –rebase y git pull –ff-only cotizaciones:

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

git config pull.ff only o equivalente git pull --ff-only es el más seguro. La razón es que una reorganización puede sobrescribir el historial y puede causar la pérdida de confirmaciones si otro desarrollador forzó la misma rama.

Pero todos ellos son válidos.

valoraciones y comentarios

Al final de la post puedes encontrar las interpretaciones de otros programadores, tú incluso tienes el poder dejar el tuyo si te apetece.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *