tutorial framework español commands comandos git

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 .