Bifurqué un proyecto en github y estoy haciendo cambios con éxito a mi maestro local y presionando para que se origine en github. Quiero enviar una solicitud de extracción, pero solo quiero incluir la última confirmación. La interfaz de usuario de solicitud de extracción en github.com muestra las últimas 9 confirmaciones y no sé cómo filtrar eso.
¿Estaba tratando de entender si debería crear una nueva sucursal local, verificar eso y de alguna manera restablecer o cambiar la base a upstream? Luego, ¿aplico mi último commit de mi maestro por id a la nueva sucursal local y lo uso para la solicitud de extracción?
Estoy tratando de entender bien los conceptos y encontrar las líneas de comando correctas para hacer lo que necesito.
git
github
pull-request
Kevin Hakanson
fuente
fuente
Respuestas:
Básicamente, debe crear una nueva sucursal y seleccionar los commits que desea agregar.
Luego, verá una
<new-branch-name>
rama en github, cambiará a ella y podrá enviar la solicitud de extracción con los cambios que desee.fuente
git remote add upstream <git repository>
ygit remote update
antes de ejecutar git checkout -b upstream upstream / master.Cree una nueva rama a partir de la última confirmación, que también está en el repositorio de origen:
Luego, use
git cherry-pick
para obtener la confirmación única para la que desea la solicitud de extracción. Si se llama a la rama con esta confirmaciónfeature
y la confirmación que desea es la última confirmación en esta rama, esto seráSuponiendo que este parche se aplica sin conflicto, ahora tiene una rama para la cual puede hacer su solicitud de extracción.
En un segundo paso, ahora debe decidir qué hacer con su
feature
sucursal. Si aún no ha publicado sus cambios en esta rama, el mejor procedimiento es probablemente volver a crear esta rama en una nueva rama (y eliminar la última confirmación, si esto no se hace automáticamentegit rebase
).fuente
feature
ya está comprometidoorigin/master
, no sucede nada durantecherry-pick
. La nueva rama debe ser deupstream/master
(es decir, la respuesta de Kevin Hakanson)Terminé en una situación en la que había bifurcado un tenedor y quería enviar una solicitud de extracción al proyecto original.
Yo tenía:
Para hacer esto, yo:
Los comandos git eran algo como:
Luego elegí my-feature-request como la rama para mi solicitud de extracción del proyecto original.
fuente
Esto casi funcionó para mí:
La única diferencia fue esta:
Necesitaba cambiar esa última línea para que git push hiciera la rama ascendente en mi repositorio de GitHub para poder hacer relaciones públicas a partir de ella.
fuente
Ya había hecho la confirmación que quería poder aislar como una solicitud de extracción de nuevo en la rama actual.
Entonces revisé una nueva sucursal
Y aquí es donde mi solución difiere de @Kevin Hakanson's , ya que necesito restablecer esta rama al lugar en la historia que quiero diferenciar de
Y seleccione el compromiso desde el que quiero crear una solicitud de extracción aislada
Finalmente empujarlo hacia el control remoto
Y tirar solicitud dat shi.
fuente
La solución para crear una nueva rama (temporal), seleccionar y crear la solicitud de extracción para esa rama no me satisfizo. No quería cambiar mi repositorio para hacer un conjunto de confirmaciones disponibles, así que se me ocurrió la siguiente alternativa:
Primero cree archivos de parche para todos los commits de interés:
Si el compromiso de interés es el último que puede usar
HEAD
en su lugar<sha>
.Ahora, puede enviar los parches al responsable del repositorio de origen, que puede aplicarlos:
Finalmente, esto debería verse igual que si una rama temporal se fusionara por una solicitud de extracción, pero sin tener esa rama adicional en el repositorio de fork.
fuente
Basado en la respuesta de @ kevin-hakanson, escribí este pequeño script bash para facilitar este proceso. Agregará el repositorio ascendente si aún no existe (solicitándole la URL) y luego solicitará tanto el nombre de la nueva rama para crear como la etiqueta / SHA del compromiso de selección de cereza en esa rama. Comprueba en qué rama o confirmación se encuentra actualmente y luego guarda los cambios para que pueda verificar la nueva rama. La estrategia de fusión mantiene los cambios del compromiso seleccionado. Después de empujar la nueva rama a
origin
(se supone que es el nombre de su repositorio remoto), la rama o confirmación en la que estaba antes se desprotege nuevamente y sus cambios anteriores salieron de la reserva.(Esto me ha funcionado en un par de pruebas simples, pero no soy un programador de bash o un experto en git, ¡así que avíseme si hay casos que me he perdido que podrían automatizarse mejor!)
fuente