Estás viendo una característica de seguridad de Git. Git se niega a actualizar la rama remota con su rama, porque la confirmación principal de su rama no es un descendiente directo de la confirmación principal actual de la rama a la que está presionando.
Si este no fuera el caso, entonces dos personas que presionan al mismo repositorio aproximadamente al mismo tiempo no sabrían que hay una nueva confirmación entrando al mismo tiempo y el que presionó al último perdería el trabajo del empujador anterior sin ninguno de los dos. ellos dándose cuenta de esto.
Si sabe que usted es la única persona que presiona y desea presionar una confirmación modificada o una confirmación que revierte la rama, puede 'forzar' a Git a actualizar la rama remota mediante el -f
interruptor.
git push -f origin master
Incluso esto puede no funcionar ya que Git permite que los repositorios remotos rechacen los empujes no rápidos en el extremo utilizando la variable de configuración receive.denynonfastforwards
. Si este es el caso, el motivo de rechazo se verá así (tenga en cuenta la parte 'remoto rechazado'):
! [remote rejected] master -> master (non-fast forward)
Para evitar esto, debe cambiar la configuración del repositorio remoto o, como un truco sucio, puede eliminar y volver a crear la rama de esta manera:
git push origin :master
git push origin master
En general, el último parámetro git push
utiliza el formato <local_ref>:<remote_ref>
, donde local_ref
es el nombre de la rama en el repositorio local y remote_ref
es el nombre de la rama en el repositorio remoto. Este par de comandos usa dos shorthands. :master
tiene un local_ref nulo, lo que significa empujar una rama nula hacia el lado remoto master
, es decir, eliminar la rama remota. Un nombre de rama sin ningún :
medio empuja la rama local con el nombre dado a la rama remota con el mismo nombre. master
en esta situación es la abreviatura de master:master
.