framework - git repository
Las actualizaciones fueron rechazadas porque la punta de su rama actual está detrás (5)
Debe ser debido a commit está por delante de su empuje actual.
1) origen de git pull "nombre de la rama que desea empujar"
2) git rebase
Si git rebase es exitoso, entonces bueno. De lo contrario, debe resolver todos los conflictos de fusión localmente y mantenerlo continuo hasta que el cambio de base con control remoto sea exitoso.
3) git rebase - continuar
Soy nuevo en Git, así que siéntete libre de tratarme como un novato.
Nuestro flujo de trabajo es tal.
Tenemos una rama 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 rama llamada
FixForBug
que rastrea (creo que esa es la palabra correcta)
origin/dev
.
Por lo tanto, si hago un
git pull
, traerá nuevos cambios de
origin/dev
cual es genial.
Ahora, cuando termino con mi solución, empujo a una rama remota llamada lo mismo.
Primero, elimino los cambios de
origin/dev
y hago un 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 sea aprobado y fusionado nuevamente en la rama de desarrollo.
Nunca
empujo nada al
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 por
segunda
vez (digamos que durante la revisión de código, alguien señala un problema), aparece el siguiente error:
error: no se pudieron enviar algunas referencias a '' https://github.limeade.info/Limeade/product.git '' sugerencia: se rechazaron las actualizaciones porque la punta de su rama actual está detrás de la sugerencia: su contraparte remota. Integre los cambios remotos (por ejemplo, pista: ''git pull ...'') antes de presionar nuevamente. pista: vea la ''Nota sobre avance rápido'' en ''git push --help'' para más detalles.
Sin embargo, si hago un
git status
dice que estoy por delante de
origin/dev
by 1 commit (lo cual tiene sentido) y si sigo la pista y ejecuto
git pull
, dice que todo está actualizado.
Creo
que
esto se debe a que estoy presionando a una rama diferente a mi rama aguas arriba.
Puedo solucionar este problema ejecutando:
git push -f origin FixForBug
En ese caso, empujará los cambios a la rama remota, diciendo (actualización forzada) y todo parece estar bien en la rama remota.
Mis preguntas:
¿Por qué se requiere
-f
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 arruinará algo en la rama remota o creará una molestia para quien eventualmente tenga que fusionar mis cosas en dev?
El comando que utilicé con Azure DevOps cuando encontré el mensaje "se rechazaron las actualizaciones porque la punta de su rama actual está detrás" fue / es este comando:
maestro de origen git pull
(o puede comenzar con una nueva carpeta y hacer un Clon) ..
Esta respuesta no aborda la pregunta planteada, específicamente, Keif ha respondido esto anteriormente, pero responde el título del título / texto de la pregunta y esta será una pregunta común para los usuarios de Azure DevOps.
Noté un comentario: "¡Siempre querrás asegurarte de hacer un tirón antes de presionar" en respuesta de Keif arriba!
También he usado la herramienta Git Gui además de la herramienta de línea de comandos Git.
(No estaba seguro de cómo hacer el equivalente del comando de línea de comando "git pull origin master" dentro de Git Gui, así que volví a la línea de comando para hacer esto).
Este es un diagrama que muestra varios comandos git para varias acciones que tal vez desee realizar:
La
-f
es
realmente necesaria debido a la nueva versión.
Cada vez que realice un cambio de base, necesitaría hacer un empuje forzado porque la rama remota no puede reenviarse rápidamente a su confirmación.
Siempre
querrá asegurarse de hacer un tirón antes de empujar, pero si no le gusta forzar el empuje para dominar o desarrollar, puede crear una nueva rama para empujar y luego fusionar o hacer un PR .
Para asegurarse de que su rama local FixForBug no esté por delante de la rama remota FixForBug, extraiga y combine los cambios antes de presionar.
git pull origin FixForBug
git push origin FixForBug
Si desea evitar tener que usar
-f
, puede usar solo
git pull
en lugar de
git pull --rebase
El no rebase buscará los cambios de
origin/dev
y los
combinará
en su rama
FixForBug
.
Entonces, podrás correr
git push origin FixForBug
sin usar
-f
.