
mike christensen
Nuestro flujo de trabajo es tal. Tenemos una sucursal llamada dev
que puedo alcanzar en origin/dev
. Cuando hacemos cambios, creamos una rama de desarrollo:
git checkout -b FixForBug origin/dev
Ahora tengo una sucursal llamada FixForBug
que es rastrear (creo que esa es la palabra correcta) origin/dev
. Por lo tanto, si hago un git pull
traerá nuevos cambios de origin/dev
Lo cual es genial. Ahora, cuando termino con mi arreglo, empujo a una rama remota llamada de la misma manera.
Primero bajo cualquier cambio de origin/dev
y hacer una rebase:
git pull --rebase
Luego empujo los cambios a una rama remota del mismo nombre:
git push origin FixForBug
Ahora, hay una rama en el servidor remoto y puedo crear una solicitud de extracción para que ese cambio se apruebe y se fusione nuevamente con la rama de desarrollo. Yo no siempre empuja cualquier cosa para origin/dev
yo mismo. Supongo que esto es un flujo de trabajo bastante común.
La primera vez que hago un git push
, funciona bien y crea la rama remota. Sin embargo, si presiono un segundo tiempo (digamos durante la revisión del código, alguien señala un problema), aparece el siguiente error:
error: no se pudieron enviar algunas referencias a ‘https://github.mydomain.info/Product/product.git’
sugerencia: las actualizaciones fueron rechazadas porque la punta de su rama actual está detrás de su contraparte remota. Integre los cambios remotos (por ejemplo, sugerencia: ‘git pull …’) antes de presionar nuevamente.
Consulte la ‘Nota sobre los avances rápidos’ en ‘git push –help’ para obtener más detalles.
Sin embargo, si hago un git status
dice que estoy por delante de origin/dev
por 1 compromiso (que tiene sentido) y si sigo la sugerencia y ejecuto git pull
, dice que todo está actualizado. I pensar esto se debe a que estoy empujando a una rama diferente a mi rama ascendente. Puedo solucionar este problema ejecutando:
git push -f origin FixForBug
En ese caso, enviará los cambios a la rama remota, diciendo (actualización forzada) y todo aparece ser bueno en la sucursal remota.
Mis preguntas:
Por que es -f
necesario en este escenario? Por lo general, cuando estás forzando algo, es porque estabas haciendo algo mal o al menos en contra de la práctica estándar. ¿Estoy bien haciendo esto, o estropeará algo en la rama remota o creará una molestia para quien tenga que fusionar mis cosas en el desarrollo?

keif kraken
los -f
es realmente requerido debido a la rebase. Cada vez que realice una reorganización, deberá forzar un empujón porque la rama remota no se puede avanzar rápidamente a su compromiso. lo harías siempre quiere asegurarse de hacer un pull antes de empujar, pero si no le gusta forzar el push a maestro o desarrollador, puede crear una nueva rama para empujar y luego fusionar o hacer un PR.

Talha Rafique
*"The tip of your current branch is behind its remote counterpart"*
significa que ha habido cambios en la sucursal remota que no tiene localmente. Y Git te dice que importes nuevos cambios desde REMOTE
y combínalo con tu código y luego push
a distancia.
Puede usar este comando para forzar cambios en el servidor con el repositorio local (). El código de repositorio remoto se reemplazará con su código de repositorio local.
git push -f origin master
Con el -f
etiqueta anulará la código de sucursal remota con su código de repositorio local.
Para asegurarse de que su sucursal local FixForBug no esté por delante de la sucursal remota FixForBug, extraiga y combine los cambios antes de empujarlos.
git pull origin FixForBug
git push origin FixForBug

Golam sorwar
Establecer el nombre de la rama actual, como Maestro:
git pull --rebase origin master
git push origin master
O el nombre de la sucursal desarrollar
git pull --rebase origin develop
git push origin develop
Si quieres evitar tener que usar -f
entonces puedes usar solo
git pull
en lugar de
git pull --rebase
El no rebase obtendrá los cambios de origin/dev
y unir ellos en su FixForBug
rama. Entonces, podrás ejecutar
git push origin FixForBug
sin uso -f
.

Pedro Mortensen
Podemos forzar cambios a GitHub usando nuestro repositorio local con el siguiente cmd:
git push -f origin main

Pedro Mortensen
El comando que usé con Azure DevOps cuando encontré el mensaje “se rechazaron las actualizaciones porque la punta de su rama actual está retrasada” fue/es este comando:
git pull origin master
(o puede comenzar con una nueva carpeta y hacer una clon)…
Esta respuesta no aborda la pregunta planteada, específicamente, Keif ha respondido esto, pero responde el título/texto del encabezado de la pregunta y esta será una pregunta común para los usuarios de Azure DevOps.
Noté el comentario: “Siempre querrás asegurarte de hacer un tirón antes de empujar” en la respuesta de Keif.
yo también he usado interfaz gráfica de usuario Git además de la herramienta de línea de comandos de Git.
(No estaba seguro de cómo hacer el equivalente del comando de la línea de comando “git pull origin master” dentro de la GUI de Git, así que volví a la línea de comando para hacer esto).
Este es un diagrama que muestra los diversos comandos de Git para diversas acciones que podría querer realizar:

Parece que el mensaje que está recibiendo dice que la sucursal remota FixForBug está por delante de su sucursal local FixForBug. Debe extraer los cambios de esa rama remota y fusionarlos en su rama local antes de presionar.
– mhatch
08/09/2016 a las 20:52
@mhatch – Así que básicamente corre
git pull origin FixForBug
antes de empujar a eso? Vale, eso tiene sentido. ¡Siéntase libre de agregar como respuesta!–Mike Christensen
08/09/2016 a las 21:08
por presionar herku si obtiene este error, haga esto. stackoverflow.com/a/21088381/12201407
– jeevu94
15 dic 2020 a las 11:00
La pregunta más copiada de Stack Overflow con texto sin formato…
-Peter Mortensen
21 de abril de 2021 a las 16:55
@PeterMortensen Jaja, ¡claramente debería ganar algún tipo de premio!
–Mike Christensen
21 de abril de 2021 a las 22:32