Enviar una solicitud de extracción en GitHub para solo la última confirmación


Bifurcé un proyecto en github y estoy haciendo cambios con éxito en mi maestro local y empujando a origin en github. Quiero enviar una solicitud de extracción, pero solo quiero incluir la última confirmación. La interfaz de usuario de pull request activada github.com muestra las últimas 9 confirmaciones y no se como filtrar eso.

Estaba tratando de entender si debería crear una nueva rama local, comprobar eso y de alguna manera restablecer o rebase a upstream? Luego aplique mi último commit de mi maestro por id al nuevo local ¿ramificar y usar eso para la solicitud de extracción?

Estoy tratando de obtener los conceptos correctos y averiguar las líneas de comando correctas para hacer lo que necesito.

Author: random, 2011-03-10

6 answers

Básicamente necesitas crear una nueva rama & cherry-pick las confirmaciones que desea agregar a ella.

Nota: es posible que los necesite antes de los comandos checkout/cherry-pick

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>

Después, verás <new-branch-name> rama en github, cambiar a ella y puede enviar la solicitud de extracción con los cambios que desee.

 272
Author: Kevin Hakanson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-06 11:26:05

Crear una nueva rama a partir de la última confirmación, que también está 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 obtener la solicitud de extracción. Si la rama con este commit se llama feature y el commit que desea es el último commit de esta rama, este será

git cherry-pick feature

Asumiendo que este parche se aplica sin conflicto, ahora tienes una rama para la que puedes hacer tu pull request.

En un segundo paso, ahora debe decidir qué hacer con su rama feature. Si aún no ha publicado sus cambios en esta rama, el mejor procedimiento es probablemente cambiar la base de esta rama a nueva rama (y eliminar la última confirmación, si esto no se hace automáticamente por git rebase).

 51
Author: Lars Noschinski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-03-10 06:34:02

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 del proyecto bifurcado en SHA: 207e29b)
  • un commit en mi fork (SHA: b67627b) que quería enviar de vuelta al proyecto original

Para hacer esto, yo:

  1. creó una nueva rama desde el SHA donde el proyecto original fue bifurcado
  2. sacó todo del proyecto original
  3. cherry eligió el commit que quería enviar como una pull request
  4. empujó todo hasta github

Los comandos de git eran algo así como:

  1. git branch my-feature-request 9685770
  2. git checkout my-feature-request
  3. git pull https://github.com/original_project/original_project.git
  4. git cherry-pick b67627b
  5. git push origin my-feature-request

Luego elegí my-feature-request como la rama para mi pull request al proyecto original.

 26
Author: John Naegle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-02-27 17:38:51

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 era esta:

git push origin upstream:upstream

Necesitaba cambiar esa última línea para que git push hiciera la rama upstream en mi repositorio de GitHub para que pudiera hacer PR a partir de ella.

 6
Author: hi_tech_lowlife,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-26 10:47:03

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 rama

git checkout -b isolated-pull

Y aquí es donde mi solución difiere de @Kevin Hakanson , ya que necesito restablecer esta rama al lugar en el historial del que quiero diferir

git reset --hard [sha-to-diff-by]

Y seleccionar la confirmación de la que quiero crear una solicitud de extracción aislada

git cherry-pick [my-isolated-commit-sha]

Finalmente empujarlo hasta el remoto

git push origin isolated-pull

Y pull request dat shi.

 4
Author: irbanana,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-01 13:03:36

La solución para crear una nueva rama (temporal), cherry-pick y crear la solicitud de extracción para esa rama no me satisfizo. No quería cambiar mi repositorio para hacer disponible un conjunto de confirmaciones, así que se me ocurrió la siguiente alternativa:

Primero crea archivos de parches para todas las confirmaciones de interés:

git format-patch -1 <sha>

Si el commit de interés resulta ser el último, puedes usar HEAD en su lugar <sha>.

Ahora, puede enviar los parches al mantenedor de la fuente repositorio, quién 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 tener el mismo aspecto que si una rama temporal fuera fusionada por una pull request, pero sin tener esa rama adicional en el repositorio fork.

 1
Author: Johannes Jendersie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-15 09:35:23