git push dice "todo actualizado" aunque tengo cambios locales
Tengo un servidor gitosis remoto y un repositorio git local, y cada vez que hago un cambio importante en mi código, también enviaré los cambios a ese servidor.
Pero hoy encuentro que aunque tengo algunos cambios locales y me comprometo con el repositorio local, cuando git push origin master
lo ejecuto dice "Todo actualizado", pero cuando usogit clone
archivos en el servidor remoto, no contiene los últimos cambios. . Y sólo tengo una rama llamada "maestra" 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
¿ Estás trabajando con una cabeza separada por casualidad?
Como en:
indicando que su última confirmación no es un encabezado de rama.
Advertencia : lo siguiente hace git reset --hard
: asegúrese de usarlo git stash
primero si desea guardar los 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 checkout
página de manual (el énfasis es mío):
A veces es útil poder verificar una confirmación que no está en la punta de una de sus ramas .
El ejemplo más obvio es verificar la confirmación 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 pedían que creara una rama temporal usando la
-b
opción, pero a partir de la versión 1.5.0, el comando anterior lo separaHEAD
de la rama actual y apunta directamente a la confirmación nombrada por la etiqueta (v2.6.18
en el ejemplo anterior).Puedes usar todos los comandos de git mientras estás en este estado.
Puedes utilizarlogit reset --hard $othercommit
para moverte más, por ejemplo.
Puede realizar cambios y crear una nueva confirmación encima de un HEAD separado .
Incluso puedes crear una combinación usandogit merge $othercommit
.El estado en el que se encuentra mientras su HEAD está desconectado no lo registra ninguna rama (lo cual es natural: no está en ninguna rama).
Lo que esto significa es que puede descartar sus confirmaciones y fusiones temporales volviendo a una rama existente (por ejemplogit checkout master
), y una posteriorgit prune
ogit gc
las recolectaría como basura.
Si hiciste esto por error, puedes pedirle al reflog HEAD dónde estabas, por ejemplo$ git log -g -2 HEAD
Si bien git push
dice "todo actualizado", técnicamente aún puedes presionar un HEAD separado, como se señala en los comentarios de Jonathan Benn.
git push origin HEAD:main
Debe especificar la rama de destino, ya que la fuente no es una rama y no tiene una rama de destino ascendente.
Err... Si eres un novato en git, ¿estás seguro de que lo has hecho git commit
antes git push
? ¡Cometí este error la primera vez!
¿Quizás estás impulsando una nueva sucursal local?
Se debe impulsar explícitamente una nueva sucursal local:
git push origin your-new-branch-name
Sólo una de esas cosas sobre git... Clonas un repositorio, creas una rama, confirmas algunos cambios, presionas... "Todo está actualizado". Entiendo por qué sucede, pero este flujo de trabajo es extremadamente hostil para los recién llegados.
Mi problema era que mi sucursal local tenía un nombre diferente al de la sucursal remota. Pude presionar haciendo lo siguiente:
$ git push origin local-branch-name:remote-branch-name
(Crédito a https://penandpants.com/2013/02/07/git-pushing-to-a-remote-branch-with-a- Different-name /)