relacionadas - Git pull: error: entrada foo no actualizada. No se puede fusionar
git pull ejemplo (8)
Estoy intentando actualizar mi repositorio desde una sucursal remota y seguir obteniendo este error cuando hago un "git pull". No hice ningún cambio local, y aunque lo tenga, no es necesario que los guarde.
He intentado:
git reset --hard
y tengo el mismo problema
Lo único que parece funcionar es eliminar el archivo ofensivo y probar un git pull nuevamente.
También probé git stash
seguido de un git pull
. No vayas.
editar: utilizando PortableGit-1.6.4-preview20090729 por lo que cualquier error anterior con errores espurios debe ser reparado.
En términos generales, esto significa que tiene cambios en sus archivos locales que no se han comprometido con su repositorio local. También puede ver esta pregunta de para un poco más de detalle.
Estaba viendo un problema similar (Windows 10): estaba en branchA
y quería ir a master
. Tuve algunos cambios sin compromiso, así que primero me git stash
luego git checkout -f master
pero todavía tengo la Entry ''fileName'' not uptodate. Cannot merge
Entry ''fileName'' not uptodate. Cannot merge
git status
no mostraba nada para confirmar.
Eventualmente, simplemente eliminé el archivo de forma manual y pude ir a la otra rama (lo que hizo, por supuesto, que mi archivo vuelva), así que creo que ha habido un error dentro de Git en alguna parte.
Este tipo de problema a menudo es causado por tratar de extraer de un repositorio que tiene dos nombres de archivo que difieren solo en el caso. Si está en FAT, NTFS en modo insensible a mayúsculas y minúsculas (esencialmente, cada vez que se usa en Windows) o HFS + en modo insensible a mayúsculas y minúsculas y tiene dos archivos "foobar" y "FOOBAR", entonces Git verá dos archivos, pero el sistema de archivos solo verá uno, lo que causará todo tipo de problemas. Git registrará, digamos, "FOOBAR", y luego presiona "foobar", que el sistema de archivos ve como simplemente reemplazar los contenidos de "FOOBAR" pero dejándolo en su lugar. Ahora, para Git, parece que "FOOBAR" ha sido reemplazado por el contenido de "foobar", y "foobar" se ha ido.
Hay dos manifestaciones diferentes de este problema básico. Una es cuando su repositorio en realidad contiene dos archivos que difieren solo en el caso. En este caso, debe trabajar en un sistema de archivos con distinción entre mayúsculas y minúsculas, o deberá editar el repositorio para asegurarse de que no se produzcan colisiones de este tipo; un sistema de archivos insensible a mayúsculas y minúsculas simplemente no puede almacenar el contenido de este repositorio.
Un caso diferente que puede solucionar es cuando ocurre un cambio de nombre que cambia el caso del archivo. Digamos, por ejemplo, que el repositorio de Git contiene un cambio de nombre de "EJEMPLO" a "ejemplo". Antes de que Git revise la nueva versión, intentará verificar que no sobrescriba algún archivo existente que tenga en su disco. Como cree que "ejemplo" es un nuevo nombre de archivo, preguntará al sistema de archivos si existe, y el sistema de archivos verá "EJEMPLO" y dirá que sí, por lo que Git se negará a verificar la nueva versión, ya que cree que se sobrescribirá. archivos sin seguimiento. En este caso, si no tiene cambios locales que le interesen, un simple git reset --hard <revision-to-checkout>
generalmente será suficiente para superar el problema y la nueva revisión. Intente y recuerde no cambiar el nombre de los archivos a otros nombres que difieran solo en caso de que esté en un sistema de archivos que no distingue entre mayúsculas y minúsculas, ya que esto provocará problemas como este.
Esto puede suceder si actualiza el índice para ignorar ciertos archivos:
git update-index --assume-unchanged <file>
y luego, por ejemplo, verificar alguna otra rama:
git checkout <branch>
> error: Entry ''<file>'' not uptodate. Cannot merge.
Forzar la actualización del índice soluciona el problema:
git update-index --really-refresh
<file>: needs update
Seguido por:
git reset --hard
Y luego todo debería volver a la normalidad.
Hay un par de formas de solucionar esto, pero he descubierto que el truco de git funciona bien para mí. Es temporal coloca tus cambios locales en otro lugar. Luego puede tirar, para agarrar los últimos cambios. Y luego puede recuperar sus cambios locales.
Solo así:
$ git pull
...
...
file your_file.rb not up to date, cannot merge.
$ git stash
$ git pull
$ git stash pop
Para profundizar en la publicación de @Brian Campbell (porque el reinicio no funcionó tampoco), quiero señalar un caso extremo que me estaba deteniendo.
OldFile
un archivo OldFile
a una carpeta diferente y lo NewFile
. Luego marqué el archivo como assume-unchanged
.
Esto me impedía cambiar de rama y no había ningún escondite para guardar o comprometerme a empujar. El problema era que no cometí este cambio de archivo con un nuevo nombre antes de establecer el indicador assume-unchanged
. Así que lo configuré de nuevo en no-assume-unchanged
, lo comprometí, luego lo configuré para assume-unchanged
y pude cambiar de nuevo las ramas.
También podría ser un problema con los permisos de archivos. Git también los está versionando, a menos que config indique lo contrario. Solo agregue esta respuesta para las personas que tienen casi un problema similar.
Vale la pena intentarlo:
¿Podría establecer, solo para esta actualización, establecer el parámetro de configuración core.trustctime
en falso?
core.trustctime
Si es falso, las diferencias ctime entre el índice y la copia de trabajo se ignoran; útil cuando el tiempo de cambio del inodo es modificado regularmente por algo fuera de Git (rastreadores del sistema de archivos y algunos sistemas de respaldo).