¿Qué significa cuando git dice que un archivo "necesita actualización"?

156

No puedo encontrar una explicación decente del mensaje "[archivo]: necesita actualización" que git a veces escupe de vez en cuando. Incluso las preguntas frecuentes oficiales de git explican esto marcado como TODO. Si alguien pudiera explicar A) lo que significa; y B) cómo solucionarlo, estaría extremadamente agradecido.

rofrankel
fuente
1
Buena pregunta, como dijiste, incluso el GitFaq no tiene una respuesta: git.wiki.kernel.org/index.php/…
Justin Ethier
1
¿Puedes decir exactamente qué comando produce esto? ¿Y qué versión de Git? Intenté eliminarlos de la interfaz de usuario, por lo que Git reciente no debería decirte esto, excepto en lugares que he olvidado ;-).
Matthieu Moy

Respuestas:

108

Significa que está intentando fusionar cambios desde algún lugar, pero los cambios incluyen modificaciones a un archivo que está sucio (actualmente modificado en su árbol de trabajo). Debe confirmar sus cambios pendientes, o guardarlos, extraer / rebase / fusionar / lo que sea que esté haciendo para actualizar y desarmar

Michael Mrozek
fuente
44
En realidad, no es el tirón, es la fusión lo que forma parte del tirón. Verá el mismo error si intenta fusionar una sucursal local con el mismo problema, y ​​creo que otras operaciones de combinación (aplicar, ocultar se aplican ...) imprimen errores similares si no es el mismo.
Cascabel
Ah gracias. Eso realmente tiene sentido. Supongo que necesito asegurarme de confirmar los cambios antes de pagar una rama diferente.
rofrankel
77
En caso de que ayude a los resultados de búsqueda, también me encontré con este problema tratando de hacer una git svn rebasecopia sucia. Stash save, rebase, stash pop, y todo estaba bien con el mundo.
Adam Tuttle
1
El archivo en sí no se puede cambiar, incluso cambiar los atributos del archivo (como los permisos) puede causar esto.
chiborg
22

Como otros han señalado, el mensaje de necesidad de actualización significa que el archivo está sucio o, en otras palabras, desactualizado. Pero en lugar de reiniciar y comenzar de nuevo, lo que se puede hacer es simplemente git statusy luego, git add <file> si está en la lista de cambios . Porque ya podía agregar el archivo antes, pero luego lo cambió. Esto me sucedió, y con este simple addhe resuelto el problema.

lomza
fuente
7

Inicie sesión en su servidor de producción / destino, cden el directorio que contiene su aplicación y ejecute esos dos comandos.

1. Restablecer a la última versión

ADVERTENCIA, esto eliminará todos sus cambios:

git reset --hard HEAD

2. Tire de los cambios

git pull origin master

NXT
fuente
1
[git reset --HAD HEAD] funcionó para mí. Me había comprometido desde una unidad compartida de Windows, pero mi directorio de Ubuntu no reflejaría la confirmación que acababa de realizar, a pesar de que era la misma carpeta (Z: asignada a / var / www / html /). Después de ejecutar esto, [git status] y [git pull] ahora muestran que está actualizado.
Keith DC
Esta es la solución que también funcionó para mí. Traté de usar git subtree usando SourceTree en Windows, y falló mucho en el proceso.
Artem Russakovskii
3

Como dice la respuesta a la otra pregunta vinculada, el mensaje simplemente significa que tiene cambios pendientes. También obtiene esto, por ejemplo, si realiza algunos cambios git add, luego cambia de opinión y lo hace git reset HEAD filecon la intención de comenzar de nuevo.

tripleee
fuente
2
git reset HEAD filehace que aparezca el mismo mensaje
experto
2

Este error puede ocurrir cuando el proceso de rebase realiza cambios adicionales en los archivos que no están en la rama de destino.

Para mí, la parte difícil fue con el .gitattributesarchivo en mi repositorio. Se agregó un nuevo tipo de archivo binario en otra rama, pero su manejo se forzó como archivo de texto. Cuando git descargó el archivo del repositorio, los EOL (en realidad son bytes de valor binario) se reemplazaron, lo que resultó en una diferencia binaria.

Agregar una nueva entrada para manejar un nuevo tipo de archivo como binario y volver a intentar todo el proceso resolvió el problema para mí.

apoderado
fuente
1

En mi caso, seguí recibiendo

assets/ElipseThree.png: needs update
You must edit all merge conflicts and then
mark them as resolved using git add

Tenía esos archivos en mi directorio, pero habían cambiado de nombre en mi rama actual. Entonces para arreglar, corrí

$ git mv assets/ElipseThree.png assets/elipseThree.png
$ git add assets/elipseHalfFull.png 
$ git rebase --continue

y me permitió continuar

ThinkDigital
fuente