348 votos

¿Cómo hago commit modificada para el repositorio git remoto?

Cuando he trabajado un poco con mi código fuente, hacer mi confirmación de lo habitual y entonces empujo a un repositorio remoto. Pero luego me di cuenta que me olvidé de organizar mis las importaciones en el código fuente. ¿Hacer el comando modificar para reemplazar el anterior commit:

> git commit --amend

Desafortunadamente el commit no ser obligado a retroceder hacia el repositorio. Es rechazado como este:

> git push origin
To //my.remote.repo.com/stuff.git/
 ! [rejected]        master -> master (non-fast forward)
error: failed to push some refs to '//my.remote.repo.com/stuff.git/'

¿Qué debo hacer? (Puedo acceder al repositorio remoto)

173voto

Charles Bailey Puntos 244082

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.

76voto

mipadi Puntos 135410

Respuesta corta: no empuje modificado se compromete a un público repo.

Respuesta larga: Un par de comandos de Git, como git commit --amend y git rebase, en realidad la reescritura de la historia gráfica. Esto está bien siempre y cuando usted no ha publicado los cambios, pero una vez que usted lo hace, usted realmente no debería ser al rededor de la historia, porque si alguien ya tiene a sus cambios, a continuación, cuando se trate de tirar de nuevo, podría fallar. En lugar de enmendar un commit, sólo debe hacer un nuevo compromiso con los cambios.

Sin embargo, si usted realmente quiere empujar una versión modificada de comprometerse, usted puede hacerlo así:

$ git push origin +master:master

La principal + signo de la fuerza de empuje a ocurrir, incluso si no resultar en un "fast-forward" commit. (Un fast-forward cometer se produce cuando los cambios que se están impulsando son un descendiente directo de los cambios que ya están en el público de repos.)

14voto

bara Puntos 817

Lo he resuelto desechar mi local se comprometen modificada y agregando los nuevos cambios en la parte superior:

# rewind to commit before conflicting
git reset --soft HEAD~1
# pull the remote version
git pull
# add the new commit on top
git add ...
git commit
git push

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X