git push dice "todo actualizado" a pesar de que tengo cambios locales


238

Tengo un servidor de gitosis remoto y un repositorio local de git, y cada vez que hago un gran cambio en mi código, también enviaré los cambios a ese servidor.

Pero hoy encuentro que a pesar de que tengo algunos cambios locales y me comprometo con el repositorio local, cuando lo ejecuta git push origin masterdice 'Todo actualizado', pero cuando uso git clonepara retirar archivos en el servidor remoto, no contiene los últimos cambios . Y solo tengo una rama llamada "maestro" y un servidor remoto llamado "origen".

PD: Esto es lo que muestra git cuando se ejecuta ls-remote, no estoy seguro de si ayuda

$ git ls-remote origin
df80d0c64b8e2c160d3d9b106b30aee9540b6ece        HEAD
df80d0c64b8e2c160d3d9b106b30aee9540b6ece        refs/heads/master
$ git ls-remote .
49c2cb46b9e798247898afdb079e76e40c9f77ea        HEAD
df80d0c64b8e2c160d3d9b106b30aee9540b6ece        refs/heads/master
df80d0c64b8e2c160d3d9b106b30aee9540b6ece        refs/remotes/origin/master
3a04c3ea9b81252b0626b760f0a7766b81652c0c        refs/tags/stage3


Vale la pena verificar que estás en el directorio correcto. Esp. cuando tiene submódulos, puede confundir las respuestas de git de los padres ..
geotheory

En mi caso, recibí un error commitque no noté e intenté presionar el código
Zohab Ali

3
olvidó comprometerse?
ldgorman

Respuestas:


256

¿Estás trabajando con una cabeza separada por casualidad?

Como en:

cabeza separada

indicando que su último commit no es un encabezado de rama.

Advertencia : lo siguiente hace lo siguiente git reset --hard: asegúrese de usar git stashprimero si desea guardar sus archivos modificados actualmente.

$ git log -1
# note the SHA-1 of latest commit
$ git checkout master
# reset your branch head to your previously detached commit
$ git reset --hard <commit-id>

Como se menciona en la git checkoutpágina de manual (énfasis mío):

A veces es útil poder pagar un commit que no está en la punta de una de sus ramas .
El ejemplo más obvio es verificar el commit en un punto de lanzamiento oficial etiquetado, como este:

$ git checkout v2.6.18

Las versiones anteriores de git no permitían esto y le pidieron que creara una rama temporal usando la -bopción, pero a partir de la versión 1.5.0, el comando anterior separa su HEADde la rama actual y apunta directamente a la confirmación nombrada por la etiqueta ( v2.6.18en el ejemplo anterior).

Puede usar todos los comandos git mientras está en este estado.
Puede usar git reset --hard $othercommitpara moverse más, por ejemplo.
Puede realizar cambios y crear una nueva confirmación encima de un HEAD separado .
Incluso puede crear una fusión utilizando git merge $othercommit.

El estado en el que se encuentra mientras su CABEZA está desconectada no se registra en ninguna rama (lo cual es natural, no se encuentra en ninguna rama).
Lo que esto significa es que usted puede descartar los compromete temporales y se funde por volver a una rama de conmutación existente (por ejemplo git checkout master), y una tarde git pruneo git gctendría que recoger basura.
Si lo hizo por error, puede pedirle al registro de HEAD dónde estaba, p.

$ git log -g -2 HEAD

44
No estoy del todo claro para mí cómo llegué a este estado (haciendo algo de git-svn en este momento), pero esto fue suficiente para llevarme de vuelta al lugar correcto. Gracias.
Christopher Schmidt

Estoy en un estado de cabeza separado, fusioné mis cambios, cometí mis cambios y ahora quiero llevar esto a Master y no puedo, me dice "todo actualizado". Pero estoy siguiendo las instrucciones proporcionadas por mi Gitlab: Step 1: git fetch origin git checkout -b "nodeAPI" "origin/nodeAPI" Step 2. Review the changes locally Step 3. Merge and fix conflicts git fetch origin git checkout "origin/master" git merge --no-ff "nodeAPI" Step 4. Push the result of the merge to GitLab git push origin "master" estoy bien hasta el último paso. Pero ahora estoy confundido sobre cómo avanzar.
John

@ John Debes estar en una rama para empujar. Mientras esté en un modo HEAD separado, eso no funcionaría. Restablece tu sucursal a donde estás: git branch -f myBranch HEADluego revisa dicha sucursal y empújala. En su caso, myBranchpodría ser mastersi estuviera en el proceso de fusión nodeAPI.
VonC

¡Tenga cuidado de perder todos los cambios locales después de ejecutar este comando! Considere hacer una copia de seguridad de git stash y código antes de hacer algo como esto.
kta

@kta Buen punto: he editado la respuesta para hacer visible esa advertencia.
VonC

152

Err .. Si eres un novato git, ¿estás seguro de que lo has hecho git commitantes git push? ¡Cometí este error la primera vez!


10
Fue git commit -a -m "your message goes here"en mi caso
ejemplo,

AMO (sarcasmo) cada vez que quiero agregar un nuevo proyecto a un github que a veces olvido y el mensaje de error me lleva a pensar que hice algo realmente mal, ¡entonces, por supuesto, DUH! commit Solo me sucede cuando se crean nuevos repositorios de respaldo y lo olvido
Tom Stickel

Noob git aquí - me olvido de cometer cada maldita vez antes de que yo empujo - empujando deben comprometerse de forma automática si no has hecho antes
Fox McCloud

2
@FoxMcCloud commiting es un paso importante ser consciente de, estoy seguro de que va a aprender a amar si no lo ha hecho :) ~ git add -A, git diff --staged, desplaza a través de cambios HMM un aspecto muy bueno, git commit -m 'bam!',git push
AFOC

58

Tal vez estás empujando una nueva sucursal local?

Una nueva sucursal local debe ser empujada explícitamente:

git push origin your-new-branch-name

Solo una de esas cosas sobre git ... Clonas un repositorio, haces una rama, comprometes algunos cambios, presionas ... "Todo está actualizado". Entiendo por qué sucede, pero este flujo de trabajo es extremadamente hostil para los recién llegados.


3
¡Gracias! Esto solucionó mi problema "todo actualizado" con una nueva sucursal que tenía
Pangu

¿Qué diablos significa "tu-nuevo-nombre-sucursal"? Ps: Tienes mucha razón sobre los recién llegados.
www-0av-Com

@ user1863152 ese es el nombre de la nueva sucursal local que creó. Parece que no hiciste eso, así que mira otras respuestas aquí.
Roman Starkov

Totalmente de acuerdo con "este flujo de trabajo es extremadamente hostil para los recién llegados". Estoy luchando con esto desde hace 1 hora. Configuré un repositorio remoto y local. Realizó cambios en el archivo REAME local e intente llevarlo a remoto y nada cambia en remoto.
Vir


28

Otra situación que es importante tener en cuenta: el tipo de estado predeterminado para git es que está trabajando en la rama "maestra". Y para muchas situaciones, simplemente pasarás el rato como tu rama principal de trabajo (aunque algunas personas se vuelven elegantes y hacen otras cosas).

De todos modos, esa es solo una rama. Entonces, una situación en la que podría entrar es:

Mi rama activa NO es la rama maestra. ... Pero habitualmente hago el comando: git push(y lo había hecho anteriormente git push origin master, así que es un atajo para ESO).

Así que habitualmente estoy empujando la rama maestra al repositorio compartido ... lo cual es probablemente una buena cosa limpia, en mi caso ...

¡Pero he olvidado que los cambios en los que he estado trabajando aún no están EN la rama maestra!

Por lo tanto, cada vez que lo intento git pushy veo "Todo actualizado", quiero gritar, pero, por supuesto, ¡no es culpa de Git! Es mio.

Entonces, en cambio, fusiono mi rama en maestra, y luego empujo, y todo vuelve a ser feliz.


Yo también quería gritar, pero luego, usted predicó el camino de la salvación, para fusionar el brant en el maestro, y luego git push.
Aaron C

16
$ git push origin local_branch:remote_branch

Explicación

Tuve el mismo error y pasé horas tratando de resolverlo. Finalmente lo encontré. Lo que no sabía es que presionar de esta manera git push origin branch-xintentará buscar la rama-x localmente y luego presionar a la rama-x remota.

En mi caso, tenía dos URL remotas. Hice un pago desde branch-x a branch-y cuando intentaba pasar de y localmente a x control remoto, recibí el mensaje de que todo está actualizado, lo cual es normal porque estaba presionando x del segundo control remoto.

En pocas palabras, para no caer en este tipo de trampa, debe especificar la referencia de origen y la referencia de destino:

$ git push origin local_branch:remote_branch

Actualizar:

Si tiene que ejecutar este comando cada vez que empuja su rama, tal vez necesite configurar el flujo ascendente entre su rama local y remota con lo siguiente:

$ git push --set-upstream origin local_branch:remote_branch

O

$ git push -u origin local_branch:remote_branch

'git push upstream dev: master' Esto significa que empujará la fuente de dev a master. ¿Correcto?
Dhaduk Mitesh

Esto me ayudó, tenía otra sucursal local nombrada como la sucursal remota, lo que causó confusión.
Hubert Kubiak

Ok, esto definitivamente funciona para mí, pero tengo que hacer esto cada vez que quiero empujar algo al control remoto. ¿Cómo lo soluciono de una vez por todas?
SamuraiJack

tal vez necesite configurar el flujo ascendente entre su sucursal local y remota con lo siguiente: $ git push --set-upstream origin local_branch: remote_branch
Melchia

6

Vea la respuesta de VonC arriba: necesitaba un paso adicional:

$ git log -1
- note the SHA-1 of latest commit
$ git checkout master
- reset your branch head to your previously detached commit
$ git reset --hard <commit-id>

Hice esto, pero cuando lo intenté git push remoterepo master, dijo "error: no pude empujar algunas referencias. Para evitar que pierdas el historial, se rechazaron las actualizaciones no rápidas, combina los cambios remotos (por ejemplo, 'git pull') antes empujando de nuevo ".

Así que hice 'git pull remoterepo master', y encontré un conflicto. Lo hice git reset --hard <commit-id>de nuevo, copiar los archivos en conflicto a una carpeta de copia de seguridad, lo git pull remoterepo masternuevo, copiados los archivos en conflicto de nuevo en mi proyecto, lo hice git commit, entonces git push remoterepo master, y esta vez funcionó.

Git dejó de decir 'todo está actualizado' y dejó de quejarse de 'avances rápidos'.


3

Me he enfrentado a una situación similar; Cuando hice los cambios y traté de hacerlo git push origin master, decía que todo estaba actualizado.

Tuve que git addcambiar el archivo y luego git push origin master. Comenzó a funcionar a partir de entonces.


44
¿No tendrías git commitque agregar ese archivo antes de presionar?
David Harkness

3

Desde su estado de git, probablemente tenga una situación diferente a la mía.

Pero de todos modos, esto es lo que me pasó ... Encontré el siguiente error:

fatal: The remote end hung up unexpectedly
Everything up-to-date

El mensaje más informativo aquí es que el control remoto colgó. Resultó que se debe a que excede el tamaño del búfer de la publicación http. La solución es aumentarlo con

git config http.postBuffer 524288000


3

Tuve este problema hoy y no tenía nada que ver con ninguna de las otras respuestas. Esto es lo que hice y cómo lo arreglé:

Un depósito mío recientemente se mudó, pero tenía una copia local. Me ramifiqué de mi rama "maestra" local e hice algunos cambios, y luego recordé que el repositorio se había movido. Solía git remote set-url origin https://<my_new_repository_url>configurar la nueva URL, pero cuando la empujaba solo decía "Todo actualizado" en lugar de presionar mi nueva rama para dominar.

Terminé resolviéndolo rebasando origin/mastery luego presionando con nombres de rama explícitos, como este:

$ git rebase <my_branch> origin/master
$ git push origin <my_branch>

¡Espero que esto ayude a cualquiera que haya tenido mi mismo problema!


3

Súper raro, pero aún así: en Windows, es posible que las referencias empaquetadas tengan una rama con mayúsculas y minúsculas (es decir, dev / mybranch), mientras que la carpeta de referencias tiene otro caso (es decir, Dev / mybranch) cuando core.ignorecase está establecido en verdadero .

La solución es eliminar manualmente la fila relevante de las referencias empaquetadas . No encontré una solución más limpia.


Ese fue un problema para mí también. Terminó con el cambio de nombre de las carpetas con mayúsculas y minúsculas dentro de la carpeta .git (registros / refs / heads, refs / heads).
Alexey Solonets

2

Me encontré con esto cuando fusioné una rama en Github y continué desarrollándome localmente. Mi solución fue un poco diferente a las otras que se han sugerido.

Primero ramifiqué una nueva sucursal local de mi antigua sucursal local (que no podía empujar). Luego empujé la nueva sucursal local al servidor de origen (Github). Es decir

$ git checkout -b newlocalbranch oldlocalbranch
$ git push origin newlocalbranch

Esto hizo que los cambios aparecieran en Github, aunque en newlocalbranch en lugar de oldlocalbranch.


2

En mi caso tuve 2 repositorios remotos.

git remote -v
originhttps https://asim_kt@...
originhttps https://asim_kt@...
origin  ssh:git@bitbucket.org:...
origin  ssh:git@bitbucket.org:...

Ambos repositorios eran iguales. Solo uno era httpsotro era ssh. Entonces, eliminar el no deseado (en mi caso, ¡ sshya que lo usé httpsporque sshno funcionaba!) Solucionó el problema.


2

Mi error fue diferente a todo lo mencionado hasta ahora. Si no tienes idea de por qué tendrías una cabeza separada, entonces probablemente no. Estaba trabajando en piloto automático con git commity git push, y no había leído el resultado git commit. Resulta que fue un mensaje de error porque olvidé -am.

[colin] ~/github/rentap.js [master] M % git commit 'figured out some more stuff with the forms in views and started figuring out row and mode in models so also made matching routes and controllers'
error: pathspec 'figured out some more stuff with the forms in views and started figuring out row and mode in models so also made matching routes and controllers' did not match any file(s) known to git.
[colin] ~/github/rentap.js [master] M % git push
Enter passphrase for key '/home/colin/.ssh/id_ecdsa': 
Everything up-to-date

Lo solucioné colocando -amdonde normalmente hago:

[colin] ~/github/rentap.js [master] M % git commit -am 'figured out some more stuff with the forms in views and started figuring out row and mode in models so also made matching routes and controllers'

2

Me he enfrentado al mismo problema. Como no agregué cambios al área de preparación. E intenté directamente empujar el código al repositorio remoto usando el comando:

git push origin master

Y muestra el mensaje Everything up-to-date.

Para solucionar este problema, prueba estos pasos

  1. git add .
  2. git commit -m "Bug Fixed"
  3. git push -u origin master

1

Verifique que no haya engañado su URL remota.

Solo quería mencionar que me encontré con esto después de habilitar Git como CVS en una configuración de compilación local de Jenkins. Parece que Jenkins revisó la confirmación más reciente de la rama que le di y también restableció mi control remoto para que se corresponda con las rutas que le di al repositorio. Tuve que revisar mi rama de características nuevamente y corregir mi URL remota de origen con 'git remote set-url'. No apunte una herramienta de compilación a su directorio de trabajo o lo pasará mal. Mi control remoto se configuró en una ruta de archivo a mi directorio de trabajo, por lo que, naturalmente, informó todo actualizado cuando intenté enviar cambios con el mismo origen y destino.


1

Otra posibilidad es que haya nombrado un directorio en su archivo .gitignore que se excluyó. Entonces los nuevos commits no serían empujados. Me ocurrió que nombré un directorio para ignorar "búsqueda", pero ese también era un directorio en mi árbol de origen.


1

Hay una forma rápida que encontré. Vaya a su carpeta .git, abra el HEADarchivo y cambie la rama en la que estaba nuevamente a master. Por ejemplo, ref:refs/heads/master


Realmente configurándolo para refs/heads/masterromper mi repositorio. Pero ajustarlo a lo que pensaba ser la cabeza commit dio el siguiente mensaje: Warning: you are leaving 1 commit behind, not connected to any of your branches. Pude llevar el compromiso a una nueva rama y fusionarlo con el maestro.
schmijos

1

Tuve el mismo problema. En mi caso fue causado por tener que nombrar el mismo control remoto. Creó el 'origen' estándar, pero he estado usando 'github' como mi control remoto durante mucho tiempo, por lo que también estaba allí. Tan pronto como eliminé el control remoto 'origen', el error desapareció.


1

Esto sucedió (las confirmaciones en mi registro de git no estaban en GitHub a pesar de que git dijo que todo estaba actualizado) y estoy seguro de que el problema era Github. No recibí ningún mensaje de error en git, pero GitHub tenía errores de estado y mis confirmaciones estaban allí varias horas después.

https://status.github.com/messages

Los mensajes de estado de GitHub fueron:

  • Estamos investigando informes de falta de disponibilidad del servicio.
  • Estamos investigando problemas para acceder a GitHub.com.
  • Estamos fallando en un sistema de almacenamiento de datos para restaurar el acceso a GitHub.com.

1

Otro error mío muy simple pero novato: simplemente olvidé agregar un -mmodificador de mensaje en mi confirmación. Entonces escribí:

git commit 'My message'

En lugar de correcto:

git commit -m 'My message'

NOTA: ¡NO arroja ningún error! Sin embargo, usted no será capaz de empujar sus compromete y siempre consigue Everything up to datevez


0

aquí, mi solución es diferente a la anterior. No he descubierto cómo ocurre este problema, pero lo arreglé. un poco inesperado

ahora viene camino:

$ git push origin  use_local_cache_v1
Everything up-to-date
$ git status
On branch test
Your branch is ahead of 'origin/use_local_cache_v1' by 4 commits.
  (use "git push" to publish your local commits)
  ......
$ git push
fatal: The upstream branch of your current branch does not match
the name of your current branch.  To push to the upstream branch
on the remote, use

    git push origin HEAD:use_local_cache_v1

To push to the branch of the same name on the remote, use

    git push origin test
    
$ git push origin HEAD:use_local_cache_v1    
Total 0 (delta 0), reused 0 (delta 0)
remote:

el comando que funciona para mí es

$git push origin HEAD:use_local_cache

(Espero que salgan de este problema lo antes posible)


0

Sé que es súper viejo, pero en mi caso lo arreglé bastante rápido.

Estaba recibiendo este mismo error mientras estaba un compromiso antes master. Luego encontré la publicación actual de desbordamiento de pila. Sin embargo, antes de continuar con las ideas sugeridas, decidí hacer una nueva confirmación e intentar nuevamente con el impulso al origen y funcionó sin problemas.

No sé por qué, pero tal vez sea útil para alguien más.


En realidad no proporciona una respuesta a la pregunta. Una vez que gane suficiente reputación , obtendrá privilegios para votar las respuestas que desee. De esta manera, los futuros visitantes de la pregunta verán un mayor recuento de votos en esa respuesta, y el respondedor también será recompensado con puntos de reputación. Vea Por qué es importante votar .
Waqar UlHaq

1
Muy bien, gracias por la aclaración. Pero, ¿por qué no puede considerarse (si lo desea) como una "solución" al problema? Sin embargo, no es la solución, pero de todos modos puede ser útil para otros.
Cisco

0

Otra posibilidad es que tenga commits que no afecten el directorio que está empujando. Entonces en mi caso tenía una estructura como

- .git
- README.md
- client/
 - package.json
 - example.js
- api/
 - requirements.txt
 - example.py

Y me comprometí a modificar el master README.md, luego corrí git subtree push --prefix client heroku-client mastery recibí el mensajeEverything up-to-date


0

Estaba trabajando con Jupyter-Notebook cuando encontré este error engañoso.

No pude resolver a través de las soluciones proporcionadas anteriormente, ya que no tenía una cabeza separada ni tenía nombres diferentes para mi repositorio local y remoto .

Pero lo que sí tuve fue que el tamaño de mis archivos era ligeramente mayor a 1 MB y el más grande era casi ~ 2 MB . Reduje el tamaño del archivo usando ¿Cómo puedo reducir el tamaño del archivo de mi notebook iPython?técnica. Ayudó a reducir el tamaño de mi archivo al borrar las salidas. Pude insertar el código, en adelante, ya que traía el tamaño de mi archivo en KB.


0

Necesitamos agregar los archivos y confirmar que los archivos ya cambiados / agregados se ejecutan a continuación.

git add. o git add nameoffile #it agregará los archivos existentes en el proyecto

git commit -m "primer compromiso" # comprometiendo todos los archivos en el proyecto

maestro de origen git push

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.