Error "Las actualizaciones fueron rechazadas porque el control remoto contiene trabajo que no tienes localmente"

Resuelto thanos asked hace 10 años • 21 respuestas

Estoy trabajando en un equipo con algunos desarrolladores que usan Git en Bitbucket . Todos estamos trabajando en una rama de desarrollo , sin presionar para dominar hasta el lanzamiento.

Uno de los desarrolladores cometió un código incorrecto que sobrescribió el mío por accidente y ahora estoy intentando enviar el código correcto al repositorio. He estado leyendo sobre este error durante algunos días y ya no puedo enviar mensajes al repositorio porque recibo el siguiente error:

 ! [rejected]        master -> dev (fetch first)
error: failed to push some refs to 'https://[email protected]/repo_user/repo_name.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

Sigo las instrucciones y pull, pero luego recibo un conflicto de fusión. Después de ingresar un mensaje sobre el conflicto de fusión, mi código local ahora es el código incorrecto que el otro desarrollador cargó por accidente (como se esperaba de pull). Entonces reemplazo el código incorrecto con la copia de seguridad que copié antes de confirmar, y cuando intento presionar nuevamente, aparece el mismo error.

¿Cómo puedo solucionar este problema?

Estos son los comandos que ejecuto para confirmar:

git pull remotename master:dev
git add --all
git commit -m "some message"
git pull remotename master:dev
git push remotename master:dev

Pensé que si mantenía este orden, no recibiría conflictos de fusión. Creo que estaba equivocado.

Busqué durante algunas horas en Google y Stack Overflow y seguí diferentes instrucciones, pero todavía no puedo enviar Git a la rama de desarrollo .

thanos avatar Jun 23 '14 07:06 thanos
Aceptado

Puede anular cualquier verificación que realice Git usando "forzar empuje". Utilice este comando en la terminal:

git push -f origin master

Sin embargo, potencialmente ignorará el trabajo existente que se encuentra en forma remota. De hecho, está reescribiendo el historial del control remoto para que sea exactamente igual a su copia local.

Donal avatar Feb 13 '2017 07:02 Donal

Ocurre cuando intentamos enviar al repositorio remoto pero hemos creado un nuevo archivo en el control remoto que aún no se ha extraído, digamos Readme. En ese caso como dice el error

git rechaza la actualización

ya que no hemos tomado control remoto actualizado en nuestro entorno local. Así que primero tira del control remoto.

git pull

Actualizará su repositorio local y agregará un nuevo Readmearchivo. Luego envíe los cambios actualizados al control remoto

git push origin master
Himanshu avatar Apr 23 '2017 18:04 Himanshu

git pull <remote> master:devbuscará la remote/masterrama y la fusionará con su local/devrama.

git pull <remote> devbuscará la remote/devrama y la fusionará con su rama actual.

Creo que dijiste que la confirmación en conflicto está activada remote/dev, por lo que esa es la rama que probablemente pretendías recuperar y fusionar.

En ese caso, en realidad no estabas fusionando el conflicto en tu sucursal local, lo cual es algo extraño ya que dijiste que viste el código incorrecto en tu copia de trabajo. Quizás quieras comprobar qué está pasando en remote/master.

Jeff avatar Jun 23 '2014 02:06 Jeff

Esto suele suceder cuando el repositorio contiene algunos elementos que no están disponibles localmente. Entonces, para impulsar nuestros cambios, en este caso necesitamos integrar los cambios remotos y luego impulsar.

Entonces crea un pull desde el control remoto

git pull origin master

Luego presione los cambios en ese control remoto

git push origin master
Sravya Yellapragada avatar Mar 06 '2019 08:03 Sravya Yellapragada