Envíe una solicitud de extracción en GitHub solo para la última confirmación
Bifurqué un proyecto en github y estoy realizando cambios exitosamente 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 interfaz de usuario de solicitud de extracción en github.com muestra las últimas 9 confirmaciones y no sé cómo filtrarlas.
Estaba tratando de entender si debería crear una nueva sucursal local, verificarla y de alguna manera restablecerla o cambiarla a upstream. ¿Luego aplicar mi última confirmación de mi maestro por identificación a la nueva sucursal local y usarla 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.
Básicamente, necesitas crear una nueva rama y seleccionar las confirmaciones que deseas agregarle.
Nota: es posible que los necesite antes de los comandos de pago/seleccionado
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>
la rama en github, cambie a ella 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 utilícelo 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ón 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 conflictos, ahora tiene una rama para la cual puede realizar su solicitud de extracción.
En un segundo paso, ahora deberá decidir qué hacer con su feature
sucursal. Si aún no ha publicado sus cambios en esta rama, el mejor procedimiento probablemente sea cambiar la base de esta rama en una nueva rama (y eliminar la última confirmación, si esto no lo hace automáticamente git rebase
).
Terminé en una situación en la que había bifurcado y quería enviar una solicitud de extracción al proyecto original.
Tuve:
- proyecto_original
- forked_project (creado a partir del proyecto original en SHA: 9685770)
- my_fork (creado a partir de un proyecto bifurcado en SHA: 207e29b)
- un compromiso en mi bifurcación (SHA: b67627b) que quería enviar nuevamente al proyecto original
Para hacer esto, yo:
- creó una nueva rama de SHA donde se bifurcó el proyecto original
- Sacó todo del proyecto original.
- Cherry eligió el compromiso que quería enviar como solicitud de extracción.
- lo subió todo a github
Los comandos de git eran algo como:
- rama git mi-solicitud-de-función 9685770
- git checkout mi-solicitud-de-función
- git pull https://github.com/original_project/original_project.git
- git selección de cereza b67627b
- git push origin mi-solicitud-de-función
Luego elegí my-feature-request como la rama de mi solicitud de extracción del proyecto original.
Esto casi funcionó para mí:
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 creara la rama ascendente en mi repositorio de GitHub para poder hacer relaciones públicas a partir de ella.
Ya había realizado 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 , ya que necesito restablecer esta rama al lugar del historial del que quiero diferenciarme.
git reset --hard [sha-to-diff-by]
Y seleccione la confirmación a partir de la cual quiero crear una solicitud de extracción aislada.
git cherry-pick [my-isolated-commit-sha]
Finalmente empújelo hacia el control remoto.
git push origin isolated-pull
Y tire de la solicitud dat shi.