Lo que estamos viendo es un git característica de seguridad. git se niega a actualizar la rama remota con su rama ya su rama de la cabeza de confirmar no es un descendiente directo de la actual cabeza de la confirmación de la rama en la que están empujando.
Si este no fuera el caso, entonces dos personas empujando para el mismo repositorio al mismo tiempo no saber que había un nuevo commit venir en el mismo tiempo y quien empujó última perdería el trabajo de la anterior empujador sin ellos darse cuenta de esto.
Si usted sabe que usted es la única persona que empuja y usted quiere empujar una versión modificada de cometer o empujar un compromete a que los vientos de la parte posterior de la rama, puede 'fuerza' git para la actualización de la rama remota mediante el modificador-f.
git push -f origin master
Incluso esto puede no funcionar como git permite a los repositorios remotos a rechazar no fastforward empuja en el extremo mediante la configuración de la variable 'receive.denynonfastforwards'. Si este es el caso, el rechazo del motivo se verá como esto (nota de la 'remoto ha rechazado la' parte):
! [remote rejected] master -> master (non-fast forward)
Para evitar esto, usted necesita cambiar el repositorio remoto de configuración de la o como un sucio hack puede eliminar y volver a crear la rama así:
git push origin :master
git push origin master
En general, el último parámetro a 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 del repositorio remoto. Este comando par utiliza dos shorthands. :master
tiene un valor null local_ref que significa empujar un null rama en el lado remoto master
, es decir. borrar el branch remoto. Un nombre de rama sin :
significa empujar la rama local con el nombre dado a la rama remota con el mismo nombre. master
en esta situación es corto para master:master
.