2010-04-11 27 views
5

que hago:git push merge error, pero git pull ya está actualizado. reclonar tratado, el mismo problema

$ git commit . 
$ git push 
error: Entry 'file.php' not uptodate. Cannot merge. 

entonces yo

$ git pull 
Already up-to-date. 

¿Qué hago? Solo quiero obtener la última versión de la copia remota y sobrescribir cualquier cosa en mi copia local.

Edit: Probé todo. Eliminé mi repositorio local, y

$ git clone ssh://[email protected]/directory 
... 
Checking out files: 100%, done. 

$ git status 
On branch master 
nothing to commit (working directory clean) 

Todo se ve bien, ¿verdad? Tire por si acaso.

$ git pull 
Already up-to-date. 

Hago un cambio de línea en un archivo para ver si puedo presionarlo.

$ git commit . 
[master 1e18af1] Rando change 
1 files changed, 2 insertions(+), 0 deletions(-) 

$ git push 
Counting objects: 13, done. 
Delta compression using up to 2 threads. 
Compressing objects: 100% (6/6), done. 
Writing objects: 100% (7/7), 646 bytes, done. 
Total 7 (delta 3), reused 0 (delta 0) 
From /directory 
d6d61aa..1e18af1 master  -> origin/master 
error: Entry 'someotherfile.php' not uptodate. Cannot merge. 
Updating b8f9a54..1e18af1 
To ssh://[email protected]/directory 
d6d61aa..1e18af1 master -> master 

tengo ni idea lo que está pasando! ¿Cómo puedo comprometer/tirar de nuevo normalmente? ¡Muchas gracias!

+0

¿Estás seguro de que estás comprometiendo los cambios? intente hacer un 'git commit -a -m" mi confirmación "' Tenga en cuenta que necesita un comentario, o no se está comprometiendo (solo para asegurarse de que esto no esté sucediendo) – Khelben

+0

Lo hice: > git commit -a - m "commit" > # On branch master > nada que confirmar (limpieza del directorio de trabajo) – ash

+0

Después de eliminar algo y volver a clonar debería funcionar, es un problema muy extraño ... – Khelben

Respuesta

2

Esto es solo una corazonada, pero ¿su control remoto era un simple repositorio o un directorio de trabajo? Si era un directorio de trabajo en lugar de un repositorio simple, el archivo file.php en el remoto tenía cambios no confirmados. El comando git push intentaba avanzar el HEAD en el control remoto, lo que causaba conflictos debido a los cambios no confirmados.

Es por eso que normalmente git pull para actualizar un directorio de trabajo, y usa git push en repositorios sin formato. Para su información, para configurar un acuerdo de recompra al descubierto para su uso como algo similar a un CVS centro/SVN/etc cesión temporal, haga lo siguiente en el mando a distancia:

 
$ mkdir my-git-repo 
$ cd my-git-repo 
$ git init --bare 

Luego, en tu repositorio local:

 
$ cd my-git-repo.git 
$ git remote add origin [email protected]:/path/to/my-git-repo/ 
$ git config branch.master.remote origin 
$ git config branch.master.merge refs/heads/master 
$ git push origin master 

Ahora tiene un repo desnudo para empujar/tirar en/desde que contiene su rama principal. Puede repetir los últimos tres pasos locales con cualquier rama local adicional que desee poner en el control remoto. La clonación es igual a la anterior y no es necesario utilizar git config ya que los controles remotos se configuran automáticamente y las referencias de fusión remotas se configuran cuando usa las ramas de seguimiento.

Espero que ayude.

1

Intenta hacer un git status y comprueba si tienes algún cambio no confirmado en 'file.php'. Debe confirmar todos los cambios en los mismos archivos, o git podría cambiar su archivo no comprometido.

Intenta hacer otra confirmación después de la extracción, y luego intenta tirar de nuevo, revisa cualquier fusión posible y presiona los datos.

Si solo desea sobrescribir su copia local, descargue el archivo file.php (git checkout HEAD^ file.php a la versión comprobada anterior a la última) a una versión anterior, y luego extraiga del repositorio.

+0

Hice sus sugerencias (edite arriba), pero nada funciona. ¿Algunas ideas? Además, el checkout de git HEAD^- file.php no parece ser un comando válido, lo que viene después de - (no puede tomar un parámetro de archivo). – ash

+0

Lo siento, estoy corrigiendo el comando ... – Khelben

4

Intente hacer un git checkout file.php luego git push nuevamente.

Actualización:

  • git pull cuenta la rama está en marcha hasta la fecha?
  • git status ¿no se muestra ningún archivo sin fusionar?
  • git commit funciona?

Si su respuesta es sí a todo lo anterior, y su git push sigue fallando, incluso después de una copia limpia del repositorio remoto (leer git clone), es muy probable que el repositorio remoto tiene un problema de índice.

+0

Intenté esto. Solo dice> Todo actualizado después de presionar. – ash

+0

¿Qué te dice 'git diff'? Los conflictos deberían haber sido señalados por 'git commit', supongo. Además, 'git status' los mostraría como no fusionados. – jweyrich

+0

git diff no muestra ninguna salida. Supongo que eso significa que no hay diferencias. – ash

1

Cortaría y pegaría mi archivo.php localmente fuera de la carpeta de trabajo. Para tu escritorio digamos.

Luego haz un pull, luego git debería buscar el archivo file.php más reciente del servidor. Luego, simplemente pegue su copia de file.php y sobrescriba el archivo extraído o abra ambas versiones y simplemente pegue sus cambios.

Espero que sea el truco.

+0

Ojalá la extracción funcionaría. En cambio, dice> Ya está actualizado. – ash

0

¿Estás seguro de que ya no tienes file.php con una funda diferente?(File.php o file.PHP ...), como en this answer?

  • uno ya cometer
  • uno en su directorio de trabajo, con un caso diferente.
+0

Estoy seguro de eso. – ash