2011-04-06 8 views
33

Abrí un repositorio en github. Hice algunos cambios e hice una solicitud de extracción.Cómo hacer una solicitud de extracción en GitHub con solo la última confirmación en la rama principal de mi repositorio bifurcado

Ahora hice algunos otros cambios y quiero hacer una nueva solicitud de extracción, pero en la pantalla de vista previa antes de hacer la solicitud de extracción muestra los compromisos anteriores también (los que ya fueron aceptados).

¿Cómo selecciono solo la última confirmación en la rama principal de mi repositorio bifurcado para poder hacer una solicitud de extracción solo con esa confirmación?

+3

posible duplicación de [solicitud de extracción de Github sin confirmaciones antiguas] (http://stackoverflow.com/questions/5415560/github-pull-request-without-old-commits) – Talljoe

+0

Al igual que la respuesta encontrada por Talljoe, se puede combinar el maestro de nivel superior de su rama o rebase su maestro sobre el maestro de nivel superior. –

Respuesta

46

Esta respuesta de un compañero de trabajo fijo mi problema:

git checkout -b NEW_BRANCH_NAME LAST_COMMIT_NAME_BEFORE_THE_ONE_WANTED 
git cherry-pick COMMIT_NAME_WANTED 
git push origin NEW_BRANCH_NAME 

A continuación, en GitHub se puede hacer una solicitud de extracción para la nueva rama que ha creado.

ACTUALIZACIÓN

que plantear y responder a esta pregunta, cuando empecé a trabajar con git. Ahora que sé más al respecto, me gustaría ampliar esta respuesta.

Al trabajar con un tenedor, es probable que desee mantenerlo actualizado con respecto al repositorio original. Así que estos serían los pasos que seguiría hoy:

git remote add upstream GIT_URL_OF_THE_ORIGINAL_REPO 

Ahora usted tiene una referencia llamada upstream lo que apunta a que la cesión temporal. Por defecto también debería tener otro llamado origin que apuntaría a su tenedor en este caso. upstream y origin es la forma en que las personas suelen nombrar estas referencias, pero puede usar el nombre que desee.

Ahora tiene que obtener los últimos cambios:

git fetch upstream 

Entonces, si usted desea actualizar su tenedor con los cambios de upstream que haría esto:

git checkout master //checkout your master branch 
git merge upstream/master //merge changes from the master branch in upstream into the branch you checked out (master) 
git push origin master //if you want to push your updated master to your remote fork 

Ahora, para responder la pregunta original, qué haría hoy si quisiera presentar un nuevo RP, sería:

git fetch upstream //get the latest changes from the original repo 
git checkout -b my_new_feature upstream/master //create a new branch, starting from the master in the original repo 
git cherry-pick WHATEVER_COMMIT_I_WANT //select the commit I want and add it to this new branch 
git push origin my_new_feature //push a new branch to my fork 

Luego solicitaría un nuevo RP para la sucursal my_new_feature.

Puede reemplazar git cherry-pick WHATEVER_COMMIT_I_WANT con solo modificar/agregar un archivo y luego hacer git add FILENAME, git commit -m "Fixing some stuff".

+0

Esto me ayudó ... – harsh

+0

¡Muchas gracias! Estaba buscando esto desde hace mucho tiempo. –

4

Probablemente deberías poner las confirmaciones en una rama separada (bifurcando antes del primer conjunto de confirmaciones), suponiendo que no están relacionadas con las primeras confirmaciones. Entonces, la rama separada puede ser el objetivo de la solicitud de extracción y solo incluirá su segundo conjunto de confirmaciones.

Cuestiones relacionadas