Estoy tratando de revisar una solicitud de extracción en GitHub a una sucursal que no es maestra. La rama de destino estaba detrás del maestro y la solicitud de extracción mostraba confirmaciones del maestro, por lo que fusioné el maestro y lo envié a GitHub, pero las confirmaciones y diferencias para ellos todavía aparecen en la solicitud de extracción después de la actualización. He comprobado dos veces que la rama en GitHub tiene los commits de master. ¿Por qué siguen apareciendo en la solicitud de extracción?
También revisé la solicitud de extracción localmente y solo muestra las confirmaciones no fusionadas.
Respuestas:
Parece que la solicitud de extracción no realiza un seguimiento de los cambios en la rama objetivo (contacté con el soporte de GitHub y recibí una respuesta el 18 de noviembre de 2014 que indica que esto es así por diseño).
Sin embargo, puede hacer que le muestre los cambios actualizados haciendo lo siguiente:
Reemplazar
githuburl
,org
,repo
,targetbranch
, ycurrentbranch
cuando sea necesario.O como señaló hexsprite en su respuesta, también puede forzarlo a actualizar haciendo clic Editen el RP y cambiando temporalmente la base a una rama diferente y viceversa. Esto produce la advertencia:
Y dejará dos entradas de registro en el PR:
fuente
Aquí hay una buena solución. Use el
Edit
botón cuando vea el PR en GitHub para cambiar la rama base a algo diferentemaster
. Luego vuelva a cambiarlomaster
y ahora mostrará correctamente solo los cambios de las confirmaciones más recientes.fuente
En resumen, GitHub no modifica el historial de confirmación automáticamente en las solicitudes de extracción. Las soluciones más simples son:
Solución 1: Rebase
Supongamos que se desea combinar en
master
desdefeature-01
:Si está trabajando en una bifurcación, es posible que deba reemplazar la
origin
anterior conupstream
. Consulte ¿Cómo actualizo un repositorio bifurcado de GitHub? para obtener más información sobre el seguimiento de ramas remotas del repositorio original.Solución 2: cree una nueva solicitud de extracción
Suponga que desea fusionar la introducción
master
defeature-01
:Ahora abra una solicitud de extracción
feature-01-rebased
y cierre la defeature-01
.fuente
Debe agregar lo siguiente a su
~/.gitconfig
archivo:Esto logrará automáticamente lo mismo que muestra esta respuesta .
Tengo esto de aquí .
fuente
Para cualquier otra persona que se encuentre con esto y esté confundido por el comportamiento de la solicitud de extracción de GitHub, la causa raíz es que un RP es una diferencia de la punta de la rama de origen frente al ancestro común de la rama de origen y la rama de destino. Por lo tanto, mostrará todos los cambios en la rama de origen hasta el ancestro común y no tendrá en cuenta los cambios que puedan haberse producido en la rama de destino.
Más información disponible aquí: https://developer.atlassian.com/blog/2015/01/a-better-pull-request/
Las diferencias comunes basadas en ancestros parecen peligrosas. Desearía que GitHub tuviera la opción de hacer un RP más estándar basado en fusión de 3 vías.
fuente
Una forma de arreglar esto es
git rebase targetbranch
en ese PR. Luegogit push --force targetbranch
, Github mostrará los commits y diff correctos. Tenga cuidado con esto si no sabe lo que está haciendo. Tal vez revise una rama de prueba primero para hacer el cambio de base y luegogit diff targetbranch
para asegurarse de que sigue siendo lo que desea.fuente
Esto sucede con GitHub cuando las confirmaciones de squash se fusionan desde la rama de destino.
Había estado usando squash y fusionar con Github como la estrategia de fusión predeterminada, incluidas las fusiones de la rama de destino. Esto introduce un nuevo commit y GitHub no reconoce que este commit aplastado es el mismo que los que ya están en master (pero con diferentes hashes). Git lo maneja correctamente, pero vuelve a ver todos los cambios en GitHub, por lo que es molesto revisarlo. La solución es hacer una fusión regular de estas confirmaciones en sentido ascendente en lugar de una fusión y fusión. Cuando desee fusionarse en otra rama en la suya como una dependencia,
git merge --squash
y revertir esa confirmación única antes de extraer de master una vez que esa otra rama haya llegado a master.EDITAR: otra solución es rebase y forzar empuje. Historia limpia pero reescrita
fuente
No estoy exactamente seguro de la teoría detrás de esto. Pero obtuve esto varias veces y pude solucionarlo haciendo lo siguiente.
Esto buscará y fusionará los cambios de su rama maestra de repositorio original (si tiene algo que ver con eso)
Luego empujas tus cambios con fuerza a tu repositorio clonado de github (objetivo)
Esto asegurará que su clon de github y el repositorio principal estén en el mismo nivel de confirmación de github y que no vea cambios innecesarios en las ramas.
fuente
Pruebe los siguientes comandos, uno por uno.
fuente
Enfoque a prueba de fallas si está demasiado preocupado por arruinar las cosas: vaya al archivo y elimine manualmente los cambios, luego aplastar con su última confirmación utilizando
Si no hay conflictos, ¡estás listo para irte!
fuente