Error de git: no se pudieron enviar algunas referencias al control remoto
No puedo empujar ahora, aunque pude hacerlo ayer.
Cuando uso me git push origin master
sale un error:
$ git remote -v
origin https://github.com/REDACTED.git (fetch)
origin https://github.com/REDACTED.git (push)
$ git push origin master
Username for 'https://github.com': REDACTED
Password for 'https://[email protected]':
To https://github.com/REDACTED.git
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to 'https://github.com/REDACTED.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
Cómo se ven mi directorio de trabajo y repositorio remoto:
(Nota: a partir de octubre de 2020 , cualquier repositorio nuevo se crea con la rama predeterminada main
, no master
. Y puede cambiar el nombre de la rama predeterminada del repositorio existente de master
amain
.
El resto de esta respuesta de 2014 se actualizó para usar " main
")
(Lo siguiente supone github.com
que no está caído, como señala eri0o en los comentarios : consulte www.githubstatus.com
para estar seguro)
Si se enviaron nuevas confirmaciones al repositorio de GitHub mientras trabajaba localmente, le recomendaría usar:
git pull --rebase
git push
La sintaxis completa es:
git pull --rebase origin main
git push origin main
Con Git 2.6+ (septiembre de 2015), después de haberlo hecho (una vez)
git config --global pull.rebase true
git config --global rebase.autoStash true
Un simple git pull
sería suficiente.
(Nota: con Git 2.27 Q2 2020 , a merge.autostash
también está disponible para su extracción regular, sin rebase)
De esa manera, reproduciría (la --rebase
parte) sus confirmaciones locales además de las recién actualizadas origin/main
(o origin/yourBranch
:) git pull origin yourBranch
.
Vea un ejemplo más completo en el capítulo 6 Pull with rebase del Git Pocket Book .
Yo recomendaría un:
# add and commit first
#
git push -u origin main
# Or git 2.37 Q2 2022+
git config --global push.autoSetupRemote true
git push
Eso establecería una relación de seguimiento entre su sucursal principal local y su sucursal ascendente.
Después de eso, cualquier impulso futuro para esa rama se puede realizar con un simple:
git push
Nuevamente, con Git 2.37+ y su opción globalpush.autoSetupRemote
, un simple git push
incluso para el primero haría lo mismo (es decir, establecer una relación de seguimiento entre su main
sucursal local y su sucursal ascendente origin/main
).
Consulte "¿ Por qué necesito impulsar explícitamente una nueva rama? ".
Dado que el OP ya reinició y rehizo su confirmación además de origin/main
:
git reset --mixed origin/main
git add .
git commit -m "This is a new commit for what I originally planned to be amended"
git push origin main
No hay necesidad de pull --rebase
.
Nota: git reset --mixed origin/main
también se puede escribir git reset origin/main
, ya que la --mixed
opción es la predeterminada cuando se usa git reset
.
Intentar:
git push -f origin master
Eso debería resolver el problema.
Basado en el comentario de @Mehdi, una aclaración sobre —force pushing
: El comando Git anterior funciona de forma segura solo para la primera confirmación. Si ya hubo confirmaciones, solicitudes de extracción o ramas en el pasado, esto lo restablece todo y lo establece desde cero. Si es así, consulte la respuesta detallada de @VonC para obtener una mejor solución.
Si acaba de usar git init
y agregó sus archivos git add .
o algo similar y agregó su rama remota, es posible que simplemente no haya confirmado ( git commit -m 'commit message'
) nada localmente para enviar al control remoto... Acabo de recibir este error y ese fue mi asunto.
Yo tuve el mismo problema. Tenía este problema porque no había realizado ninguna confirmación, ni siquiera una confirmación inicial, y todavía estaba intentando presionar.
Una vez que lo hice git commit -m "your msg"
, todo funcionó bien.