¿Cómo actualizar una solicitud de extracción del repositorio bifurcado?

592

Así que primero bifurqué un repositorio y luego me comprometí con ese repositorio bifurcado. Entonces abrí una solicitud de extracción. La solicitud de extracción enumeró todos los cambios que quería.

Después de revisar mi solicitud de extracción, hubo una serie de cambios que el propietario del repositorio quería que hiciera antes de aceptarla. He realizado esos cambios en mi bifurcación, ¿cómo actualizo la solicitud de extracción con esos cambios (o no es así como debería manejarlo)?

stevebot
fuente
77
@PaulDraper No estoy de acuerdo, ese usuario ya conoce y presenta varios métodos para actualizar una solicitud de extracción, y pregunta cuál es el mejor. Yo, por otro lado, no conocía ningún método y estaba preguntando acerca de su existencia. Como muestra la popularidad de esta pregunta, este es el caso de muchos otros usuarios.
stevebot
66
Creo que la popularidad se debe al hecho de que (1) esta es una pregunta muy buena y común y (2) algunos usuarios terminaron aquí en lugar de allá. Si se hubiera identificado originalmente como un duplicado, habrían encontrado que la otra pregunta era la misma y la habrían respondido.
Paul Draper

Respuestas:

586

Lo has hecho correctamente. La solicitud de extracción se actualizará automáticamente. El proceso es:

  1. Solicitud de extracción abierta
  2. Confirmar cambios basados ​​en comentarios en su repositorio local
  3. Empuje a la rama relevante de su tenedor

La solicitud de extracción agregará automáticamente las nuevas confirmaciones en la parte inferior de la discusión de la solicitud de extracción (es decir, ya está allí, ¡desplácese hacia abajo! )

Shelhamer
fuente
73
¡bonito! Estaba revisando en todas partes, pero la solicitud de extracción real. es magia, magia negra, no lo cuestionaré.
stevebot
57
Esta es una buena razón para trabajar en sucursales. Si, por ejemplo, siempre presionó para dominar, podría agregar involuntariamente a su solicitud de extracción anterior.
Brian Pan
3
Este ya no parece ser el caso, aunque fue en el pasado. Aquí hay un ejemplo de una solicitud de extracción que hice ( github.com/toopay/bootstrap-markdown/pull/167 ) en comparación con la propia sucursal ( github.com/mhuggins/bootstrap-markdown/commits/… ). Curioso cómo hacer esto ya que el proceso parece haber cambiado.
Matt Huggins
1
GitHub realmente le dice: "Agregue más confirmaciones presionando a la rama SolveWorldHunger en ChangeTheWorldProject".
flow2k
1
Lo mismo aquí: no veo cambios del repositorio bifurcado en el repositorio principal. Parece un error de GitHub
andrfas
78

Actualizar una solicitud de extracción en GitHub es tan fácil como confirmar los cambios deseados en la rama existente (que se utilizó con la solicitud de extracción), pero a menudo también se desea aplastar los cambios en una sola confirmación:

git checkout yourbranch
git rebase -i origin/master

# Edit command names accordingly
  pick   1fc6c95 My pull request
  squash 6b2481b Hack hack - will be discarded
  squash dd1475d Also discarded

git push -f origin yourbranch

... y ahora la solicitud de extracción contiene solo una confirmación.


Enlaces relacionados sobre rebases:

jmu
fuente
2
Voto por mencionar rebase. Ayuda a eliminar el ruido en el historial de revisiones.
stevebot
+11 (sí, tenía la intención de repetir la clave. Usar git rebase / pick / squash funciona muy bien.)
javadba
11
La desventaja de este enfoque es que está eliminando su compromiso anterior. Eso significa que si se hacen comentarios en la solicitud de extracción, se perderán y desaparecerán junto con la confirmación original.
blowekamp
En Bitbucket puede ver comentarios sobre "versiones anteriores" de un archivo en una solicitud de extracción. Aunque sería bueno ver algo así como en Gerrit, donde parcheas las confirmaciones y puedes ver toda la historia con comentarios. Es un buen historial de git y trazabilidad cuando puede regresar y ver la discusión completa sobre cualquier confirmación.
Amor
36

Simplemente presione a la rama a la que hace referencia la solicitud de extracción. Mientras la solicitud de extracción aún esté abierta, debería actualizarse con cualquier confirmación agregada automáticamente.

igorw
fuente
14

Lo hice usando los siguientes pasos:

  1. git reset --hard <commit key of the pull request>
  2. Hice mis cambios en el código que quería hacer
  3. git add
  4. git commit --amend
  5. git push -f origin <name of the remote branch of pull request>
Vikasdeep Singh
fuente
1
Muy bien, prefiero este enfoque! GitHub incluso oculta (pero mantiene) las secciones obsoletas del código y los comentarios asociados. Es bueno recordar que si la solicitud de extracción contiene varias confirmaciones y la que requiere reparación no está en la punta de la rama, "git reset --hard" descartará todos los cambios confirmados después de la ID especificada. Tenía una copia de seguridad que apliqué manualmente. Sin embargo, no es muy conveniente si hay más de una confirmación adicional ...
Nagev
3

Si usa GitHub en Windows :

  1. Hacer cambios a nivel local.
  2. Abra GitHub, cambie a repositorios locales, haga doble clic en el repositorio.
  3. Cambie la rama (cerca de la parte superior de la ventana) a la rama desde la que creó la solicitud de extracción (es decir, la rama en el lado de la horquilla de la comparación)
  4. Debería ver la opción para ingresar el comentario de confirmación a la derecha y confirmar los cambios en su repositorio local.
  5. Haga clic en sincronización en la parte superior, lo que, entre otras cosas, empuja su confirmación de local a su bifurcación remota en GitHub.
  6. La solicitud de extracción se actualizará automáticamente con las confirmaciones adicionales. Esto se debe a que la solicitud extraída representa una diferencia con la rama de su bifurcación. Si va a la página de solicitud de extracción (aquella en la que usted y otros pueden comentar su solicitud de extracción), la pestaña Compromisos debe tener sus confirmaciones adicionales.

Es por eso que, antes de comenzar a hacer sus propios cambios, debe crear una rama para cada conjunto de cambios que planea incluir en una solicitud de extracción. De esa manera, una vez que realiza la solicitud de extracción, puede realizar otra rama y continuar trabajando en alguna otra tarea / función / corrección de errores sin afectar la solicitud de extracción anterior.

AaronLS
fuente