Contribuyendo al proyecto en github, cómo "rebasar mi solicitud de extracción en la parte superior del maestro"

98

Ok, estoy contribuyendo a un proyecto en github. El proyecto en github es upstream, mi repositorio bifurcado en github es origin, y mi localrepositorio en mi computadora.

git checkout -b feature
# Working on feature
git commit -a -m 'only commit on feature'

luego presento una solicitud de extracción

git push origin master

La solicitud de extracción se revisa y es necesario realizar un cambio no relacionado. Alguien más se compromete y se fusiona conupstream/master

Ahora el encargado del upstreammantenimiento me pide que "vuelva a basar mi solicitud de extracción sobre la maestra"

Esta es mi historia (inserte el efecto de sonido Ley y orden) .....

No hice ningún cambio en la solicitud de extracción y sigue siendo la misma función de confirmación en la rama.

git checkout master
git fetch upstream
git checkout feature
git rebase master
=> "Current branch feature is up to date."
git push origin feature
=> "Everything up-to-date"

No entiendo. ¿Cómo es esto posible cuando sé que alguien se comprometió y se fusionó upstream/masterdespués de enviar mi solicitud de extracción a origin/feature?

¿Alguien puede decirme cuál debería ser el procedimiento correcto en esta situación?

fontno
fuente

Respuestas:

109

Solo muestra una recuperación en el repositorio ascendente. Eso en realidad no actualiza ninguna de sus sucursales locales. Es sólo actualiza su conocimiento deupstream . Debería asegurarse de que upstream/masteresté completamente fusionado con su master, como con a git pull, antes de rebasar en master, o más simplemente simplemente rebasar en upstream/master.

Es decir:

git checkout master
git pull upstream master
git checkout feature
git rebase master

o

git checkout feature
git rebase upstream/master

Actualizar:

Después de arreglar su featuresucursal local , deberá volver a colocarlaorigin para terminar de actualizar la solicitud de extracción. Como ya presionó featureuna vez, no puede simplemente pushvolver a hacerlo porque una rebase cambia el historial, y no es un avance rápido. Normalmente, cuando un empujón falla con un "avance no rápido", lo resolverías haciendo un tirón, pero un tirón simplemente combinará las dos historias divergentes, que definitivamente no es lo que quieres. Eso significaría que su featurerama anterior (previa a la rebase) se combinaría con la nueva (posterior a la rebase). Quieres sobrescribir origin/feature con el estado del nuevofeature rama, volcando cualquier registro de la antigua. Eso significa que querrá forzar el impulso para que suceda, aunque no sea un avance rápido, usando git push -f origin feature. Nota:peligroso, y puedes perder confirmaciones con él. Úselo solo si está absolutamente seguro de que sabe lo que está haciendo, como aquí mismo, donde intencionalmente desea eliminar las confirmaciones antiguas e inútiles en la featurerama anterior a la rebase .

Ryan Stewart
fuente
1
Ok, ya veo, gracias por la aclaración. Veo que debería haber tirado en lugar de ir a buscar. Ahora tengo otro problema, cuando git push origin featureobtengo un error que no es de avance rápido, no pude presionar, etc. ¿Git pull --rebase resolvería este error y lo enviaría a mi rama de funciones o esto causaría problemas al mantenedor y otros?
fontno
1
Actualicé mi respuesta para cubrir el empujón.
Ryan Stewart
En mi caso, agregué el repositorio upstream como un control remoto, pero olvidé buscarlo. git fetch upstreamdescargó los últimos cambios y finalmente git rebase upstream/developfuncionó.
Alberto Chiusole
9

Ahora el responsable de mantenimiento me pide que "vuelva a basar mi solicitud de extracción en la parte superior del maestro"

Tenga en cuenta que desde septiembre de 2016, el mantenedor puede activar la reorganización por sí mismo.

Ver " Rebase y fusionar solicitudes de extracción "

Cuando selecciona la nueva opción "Rebasar y fusionar", las confirmaciones de la rama de la solicitud de extracción se vuelven a basar en la punta de la rama base, y luego la rama base en sí se reenvía rápidamente a esta cabeza recién rebasada. Las nuevas bases establecen automáticamente el confirmador de las confirmaciones reajustadas para el usuario actual, mientras se mantiene intacta la información de autoría. Esta operación no modificará la rama de la solicitud de extracción.

Si no se puede realizar una reorganización debido a conflictos, se lo haremos saber para que pueda resolverlos manualmente según sea necesario.

https://cloud.githubusercontent.com/assets/2195/18671961/a03fa9b6-7f35-11e6-8fa0-e16b2fede8ca.gif

VonC
fuente