tag - Envía una solicitud de extracción en GitHub solo para la última confirmación
git push tag (6)
Logré un proyecto en github y estoy haciendo cambios con éxito en mi maestro local y empujando al origen en github. Quiero enviar una solicitud de extracción, pero solo quiero incluir la última confirmación. La IU de solicitud de extracción en github.com muestra las últimas 9 confirmaciones y no sé cómo filtrarlas hacia abajo.
¿Estaba tratando de entender si debería crear una nueva sucursal local, verificar eso y de alguna manera restablecer o reconfigurar a upstream? ¿A continuación, aplique mi último compromiso de mi maestro por id a la nueva sucursal local y lo use para la solicitud de extracción?
Estoy tratando de entender correctamente los conceptos y descubrir las líneas de comando correctas para hacer lo que necesito.
Básicamente, debe crear una nueva rama y cherry-pick los compromisos que desea agregar.
Nota: es posible que los necesite antes de los comandos de pago / selección
git remote add upstream <git repository>
git remote update
git checkout -b <new-branch-name> upstream/master
git cherry-pick <SHA hash of commit>
git push origin <new-branch-name>
Luego, verá <new-branch-name>
en github, cámbiela y podrá enviar la solicitud de extracción con los cambios que desee.
Cree una nueva rama a partir de la última confirmación, que también se encuentra en el repositorio de origen:
git branch new-branch origin/master
git checkout new-branch
Luego use git cherry-pick
para obtener la confirmación única para la que desea la solicitud de extracción. Si la rama con esta confirmación se denomina feature
y la confirmación que desea es la última confirmación en esta rama, esto será
git cherry-pick feature
Suponiendo que este parche se aplique sin conflicto, ahora tiene una sucursal para la que puede hacer su solicitud de extracción.
En un segundo paso, ahora debe decidir qué hacer con su rama de feature
. Si aún no ha publicado sus cambios en esta rama, es probable que el mejor procedimiento sea rebasar esta rama en una nueva rama (y eliminar la última confirmación, si esto no se hace automáticamente con git rebase
).
Esto casi me funcionó:
git checkout -b upstream upstream/master
git cherry-pick <SHA hash of commit>
git push origin upstream
La única diferencia fue esta:
git push origin upstream:upstream
Necesitaba cambiar esa última línea para que git push hiciera que la rama ascendente en mi repositorio de GitHub pudiera hacer PR a partir de ella.
La solución para crear una nueva sucursal (temporal), seleccionar y crear la solicitud de extracción para esa rama no me satisfacía. No quería cambiar mi repositorio para hacer un conjunto de confirmaciones disponibles, por lo que se me ocurrió la siguiente alternativa:
Primero crea archivos de parches para todos los compromisos de interés:
git format-patch -1 <sha>
Si el compromiso de interés es el último, puede usar HEAD
lugar de <sha>
.
Ahora, puede enviar los parches al mantenedor del repositorio de origen, quien puede aplicarlos:
git branch new-branch <master or some older commit where the fork diverged>
git checkout new-branch
git am < <the patch>
...
git checkout master
git merge new-branch
Finalmente, esto debería verse como si una rama temporal se fusionara con una solicitud de extracción, pero sin tener esa rama adicional en el repositorio de la bifurcación.
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.
Tuve:
- orignal_project
- forked_project (creado a partir del proyecto original en SHA: 9685770)
- my_fork (creado a partir de un proyecto bifurcado en SHA: 207e29b)
- un commit en mi fork (SHA: b67627b) que quería enviar al proyecto original
Para hacer esto, yo:
- creó una nueva rama desde el SHA donde se bifurcó el proyecto original
- sacó todo del proyecto original
- Cherry eligió el compromiso que quería enviar como una solicitud de extracción
- lo empujó todo hasta github
Los comandos de git eran algo así como:
- git rama mi-característica-solicitud 9685770
- git checkout my-feature-request
- git pull https://github.com/original_project/original_project.git
- git cherry-pick b67627b
- git push origin my-feature-request
Luego elegí mi solicitud de características como la rama para mi solicitud de extracción al proyecto original.
Ya había hecho la confirmación que quería poder aislar como una solicitud de extracción en la rama actual.
Así que revisé una nueva sucursal
git checkout -b isolated-pull
Y aquí es donde mi solución difiere de la de @Kevin Hakanson''s , ya que necesito restablecer esta rama al lugar en la historia que quiero diferenciar
git reset --hard [sha-to-diff-by]
Y seleccione el compromiso desde el que quiero crear una solicitud de extracción aislada
git cherry-pick [my-isolated-commit-sha]
Finalmente empújalo hasta el control remoto.
git push origin isolated-pull
Y tire de la solicitud dat shi.