Error “Se rechazaron las actualizaciones porque el control remoto contiene trabajo que no tiene localmente”

5 minutos de lectura

avatar de usuario de thanos
gracias

Estoy trabajando en un equipo con algunos desarrolladores que usan Git en Bitbucket. Todos estamos trabajando en un desarrollador rama, no empujando a maestro hasta un lanzamiento.

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

 ! [rejected]        master -> dev (fetch first)
error: failed to push some refs to 'https://myusername@bitbucket.org/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 para 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 del pull). Así que 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

Habría pensado 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 hacer un empuje de Git al desarrollador rama.

  • este mismo mensaje de error se muestra cuando emite git push cuando actualmente está en dir desde otro repositorio … el mensaje de git debe actualizarse para reflejar esto, especialmente porque su tono suena tan autoritario que uno podría estar convencido de lo contrario

    –Scott Stensland

    22 de marzo de 2021 a las 15:53

Avatar de usuario de Donal
donal

Puede anular cualquier control que haga Git usando “force push”. Usa este comando en la terminal:

git push -f origin master

Sin embargo, potencialmente ignorará el trabajo existente que está en remoto. Efectivamente, está reescribiendo el historial del control remoto para que sea exactamente como su copia local.

  • El uso de la bandera forzar empuje (-f) es muy peligroso y nunca debe ser parte de su flujo de trabajo regular

    – Spaideri

    20 de abril de 2017 a las 7:13

  • Votado a la baja porque me falta alguna advertencia en esta respuesta.

    – Melebio

    19 de abril de 2018 a las 9:43

  • ¡Oh! Esto obliga al repositorio a reescribirse a sí mismo.

    – Azarsa

    7 mayo 2018 a las 11:35

  • @simon esto es peligroso porque ignora el trabajo que está en remoto y fuerza sus cambios en el repositorio. Entonces, si no quiere estropear el trabajo de su equipo, NO fuerce el empuje.

    – Gasten

    19 de febrero de 2020 a las 13:30

  • Levanta la mano si hiciste esto y te sientes culpable pero lo volverías a hacer.

    -Eric

    15 de julio de 2020 a las 17:40

Avatar de usuario de Himanshu
Himanshu

Ocurre cuando intentamos ingresar al repositorio remoto pero se ha 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 tira primero desde el control remoto

git pull

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

git push origin master

  • estaba haciendo git pull origin develop en mi sucursal de desarrollo local, pero ahora, solo haciendo git pull a mi me funciona bien, no se porque.

    – Marcelo

    13 de junio de 2018 a las 15:10

  • porque de forma predeterminada, si su sucursal local está sincronizada con la sucursal remota y está desprotegido en esa sucursal, no necesita especificar una sucursal solo git pull es suficiente

    – Himanshu

    13 de junio de 2018 a las 17:26

  • git pull ayuda

    – Ahnaaf Al-Rafee

    28 de marzo de 2021 a las 16:09

git pull <remote> master:dev traerá el remote/master rama y fusionarlo en su local/dev rama.

git pull <remote> dev traerá el remote/dev rama, y ​​fusionarlo en su rama actual.

Creo que dijiste que el compromiso en conflicto está activado. remote/devpor lo que esa es la rama que probablemente pretendía obtener y fusionar.

En ese caso, en realidad no estabas fusionando el conflicto en tu rama local, lo cual es un poco extraño ya que dijiste que viste el código incorrecto en tu copia de trabajo. Es posible que desee comprobar lo que está pasando en remote/master.

  • Vaya… Nunca supe eso. Pero tiene mucho sentido ahora. La rama maestra también era incorrecta, por lo que su respuesta aclara toda mi pregunta. Todavía soy un poco nuevo en git. ¡Muchas gracias por decirme la diferencia entre esos dos!

    – thanos

    23 de junio de 2014 a las 2:49


  • La mejor opción para mí fue git pull --rebase.

    – Derek Foulk

    2 de julio de 2015 a las 22:07

  • git pull <remote> master:dev Qué es dev aquí ?

    – Ahnaaf Al-Rafee

    28 de marzo de 2021 a las 16:07

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

Así que crea un pull desde el control remoto

git pull origin master

Luego presione los cambios a ese control remoto

git push origin master

Puedes probar esto: git pull origin master --rebase

  • ¡Hola Eduardo! Esto funcionó para mí. Pero, ¿puedes explicar por qué funciona? ¿Qué hace exactamente este comando?

    -Akshaya Natarajan

    11 de junio de 2020 a las 18:24

  • Después de agregar manualmente el archivo README.md en el sitio GitHub. Tampoco puedo enviar el proyecto desde el dispositivo a Git como normalmente. Tu respuesta me ayudo mucho!!!! Gracias hermano

    – Nghien Nghien

    14 de febrero de 2022 a las 18:43

Avatar de usuario de Peter Mortensen
Pedro Mortensen

Necesitas ingresar:

git pull
git fetch 
git merge

Si usas un git push origin master --forcetendrás un gran problema.

  • ¡Hola Eduardo! Esto funcionó para mí. Pero, ¿puedes explicar por qué funciona? ¿Qué hace exactamente este comando?

    -Akshaya Natarajan

    11 de junio de 2020 a las 18:24

  • Después de agregar manualmente el archivo README.md en el sitio GitHub. Tampoco puedo enviar el proyecto desde el dispositivo a Git como normalmente. Tu respuesta me ayudo mucho!!!! Gracias hermano

    – Nghien Nghien

    14 de febrero de 2022 a las 18:43

Avatar de usuario de Samir Poudel
samir pudel

Fuerza para empujar

git push -f origen maestro

  • Esto probablemente debería venir con una advertencia.

    – Chris

    14 de febrero de 2020 a las 21:32

  • Incluso si esto seguramente funcionaría, ¿te importaría explicarlo? ¿Podría haber algún peligro al hacer esto? En caso afirmativo, explíquelo aún más, como: “Amigos, asegúrese de perder confirmaciones usando esto”

    –Nico Haase

    5 oct 2020 a las 15:35

¿Ha sido útil esta solución?