Cómo hacer una solicitud de extracción de GitHub


283

¿Cómo creo y / o envío una solicitud de extracción a otro repositorio alojado en GitHub?


2
¿No se explica esto suficientemente en las páginas de ayuda de GitHub ?
Lanzz

27
@lanzz No, la página de ayuda no incluye algunos consejos útiles, que desearía saber antes de hacer mis primeras solicitudes de extracción (ver más abajo).
VonC

9
@ianzz, por supuesto, la página de Github es "suficiente", pero hay muchas maneras de aprender. Lo que me esforcé por hacer fue hacer un tutorial para principiantes. Lo que me pareció que faltaba en la explicación de Github fue que: 1) no estaba contenido en una fuente (dos páginas que no están claramente vinculadas), 2) no era sucinto (esas páginas son muy largas, largas = abrumadoras), 3) era no explicado en términos humanos en secciones clave. En la enseñanza, siempre es difícil para un maestro más experimentado saber lo que un principiante no sabe. Ponerme en la piel del principiante fue mi objetivo al escribir esto.
Tim Peterson

12
Largo puede significar abrumador, lo que puede significar abortar = no aprender. Uno puede "terminar entendiendo el proceso involucrado" a través de muchas vías que obviamente no serían una de ellas. Para poner fin a la guerra de las llamas, no hay necesidad de responder, entiendo de dónde vienes.
Tim Peterson

8
Realiza una solicitud de extracción desde su propio tenedor. Definitivamente esa no era mi suposición original.
Derek Illchuk

Respuestas:


236

(Además de la página oficial " Ayuda de GitHub 'Uso de solicitudes de extracción' ",
consulte también " Bifurcación frente a bifurcación en GitHub ", " ¿Cuál es la diferencia entre el origen y el flujo ascendente en GitHub ")

Un par de consejos sobre solicitudes de extracción:

Suponiendo que primero haya bifurcado un repositorio , esto es lo que debe hacer en ese tenedor que posee:

  • crear una rama : aísle sus modificaciones en una rama. No cree una solicitud de extracción desde masterdonde pueda tener la tentación de acumular y mezclar varias modificaciones a la vez.
  • cambiar la base de esa rama : incluso si ya realizó una solicitud de extracción desde esa rama, al cambiarla por encima de origin/master(asegurándose de que su parche siga funcionando) actualizará la solicitud de extracción automáticamente (no es necesario hacer clic en nada)
  • actualice esa rama : si su solicitud de extracción es rechazada, simplemente puede agregar nuevas confirmaciones y / o rehacer su historial por completo: activará su solicitud de extracción existente nuevamente.
  • "enfocar" esa rama : es decir, hacer que su tema sea "estricto", no modificar miles de clases y todas las aplicaciones, solo agregar o corregir una característica bien definida, manteniendo pequeños los cambios .
  • eliminar esa rama : una vez aceptado, puede eliminar esa rama de forma segura en su bifurcación (y git remote prune origin). La GUI de GitHub le propondrá que elimine su sucursal en su página de solicitud de extracción.

Nota: para escribir la solicitud de extracción en sí, consulte " Cómo escribir la solicitud de extracción perfecta " (enero de 2015, GitHub)


Marzo de 2016: nueva opción de botón de combinación de relaciones públicas: consulte "¿ Confirmaciones de squash de Github desde la interfaz web en la solicitud de extracción después de comentarios de revisión? ".

squash

El mantenedor del repositorio puede elegir merge --squashesos compromisos de relaciones públicas.


Después de una solicitud de extracción

En cuanto al último punto, desde el 10 de abril de 2013, " Botón de combinación rediseñado ", la rama se elimina por usted:

nuevo botón de fusión

La eliminación de ramas después de fusionar también se ha simplificado.
En lugar de confirmar la eliminación con un paso adicional, eliminamos inmediatamente la rama cuando la elimine y proporcionamos un enlace conveniente para restaurar la rama en caso de que la necesite nuevamente .

Eso confirma la mejor práctica de eliminar la rama después de fusionar una solicitud de extracción.


solicitud de extracción frente a solicitud de extracción


notas electrónicas para "repositorio" (sic)

<humour>

¡Esa (solicitud de extracción) ni siquiera está definida correctamente por GitHub!

Afortunadamente, una verdadera organización de noticias de negocios lo sabría, y hay una nota electrónica para reemplazar pull-replace por 'e-note' :

https://pbs.twimg.com/media/BT_5S-TCcAA-EF2.jpg:large

Así que si sus repos o toria necesita un e-nota ... pedir Fox Business . Ellos están en el saber.

</humour>


2
- @ VonC gracias por esto. ¿Te importaría proporcionar algún código para señalar cómo lo que has dicho difiere de lo que dije? La decisión branchvs. masterparece crítica para tomar la respuesta de mi / Github de una solución teórica a algo que uno realmente usaría.
tim peterson

1
@timpeterson el hecho de que puede cambiar completamente el historial dentro de esa rama, y ​​que actualizará la solicitud de extracción automáticamente, es clave aquí: porque una solicitud de extracción debe hacerse en el último proyecto ascendente. Si ese repositorio ascendente tiene nuevas confirmaciones, debe volver a basar su rama encima (cambiar el historial de esa rama) y volver a colocarlo en su bifurcación: eso actualizará su solicitud de extracción (basada en esa misma rama) automáticamente.
VonC

44
No entiendo la parte rebase. Que hace eso ( Esta página suena como ciencia espacial pero creo que no lo es). ¿Qué comando emitirías en ese momento que "rebases"?
Camilo Martin

1
@CamiloMartin si estás en tu rama de relaciones públicas, entonces a git pull --rebase upstream/masterestá bien.
VonC

1
@vikramvi master es una rama en común con el repositorio original que ha bifurcado. Esa rama siempre debe reflejar el repositorio original. Aísla sus soluciones en una rama para su PR. Utiliza master solo como una forma de saber qué hay en el repositorio original (y para volver a armar su rama de arreglo encima de él, para garantizar una combinación fácil de solicitud de extracción)
VonC

202

Para aprender cómo hacer una solicitud de extracción, acabo de seguir dos páginas de ayuda separadas en Github (enlazadas a continuación como viñetas). Los siguientes comandos de línea de comando son para la Parte 1 . La parte 2 , la solicitud de extracción real, se realiza completamente en el sitio web de Github.

$ git clone https://github.com/tim-peterson/dwolla-php.git
$ cd dwolla-php
$ git remote add upstream https://github.com/Dwolla/dwolla-php.git
$ git fetch upstream
// make your changes to this newly cloned, local repo 
$ git add .
$ git commit -m '1st commit to dwolla'
$ git push origin master
  • Parte 1 : bifurcar el repositorio de alguien: https://help.github.com/articles/fork-a-repo

    1. haga clic en el botón 'fork' en el repositorio al que desea contribuir, en este caso: repositorio PHP de Dwolla (Dwolla / dwolla-php)
    2. obtenga la URL de su bifurcación recién creada, en este caso: https://github.com/tim-peterson/dwolla-php.git (tim-peterson / dwolla-php)
    3. escriba la git clone->cd dwolla-php->git remote->git fetchsecuencia anterior para clonar el tenedor en algún lugar de su computadora (es decir, "copiar / pegar", en este caso third_party TimPeterson$:) y sincronizarlo con el repositorio maestro (Dwolla / dwolla-php)
    4. hacer cambios a su repositorio local
    5. escriba la git add->git commit->git pushsecuencia anterior para enviar sus cambios al repositorio remoto, es decir, su bifurcación en Github (tim-peterson / dwolla-php)
  • Parte 2 : hacer solicitud de extracción: https://help.github.com/articles/using-pull-requests

    1. vaya a la página web de su tenedor en Github ( https://github.com/tim-peterson/dwolla-php )
    2. haga clic en el botón 'solicitud de extracción'
    3. asigne un nombre a pull-request, complete los detalles de los cambios que realizó, haga clic en el botón Enviar.
    4. ya terminaste !!

44
- @ alexgray, dejé las indicaciones de bash, por ejemplo, Tims-MacBook-Pro:third_party TimPeterson$porque este es un tutorial para principiantes y esas indicaciones ayudan a orientar al usuario.
tim peterson el

1
Si. Gracias. Un ejemplo de trabajo que puedo seguir. ¿Por qué no tienes ese git hub?
Sevenearths

Después git fetch upstream, ¿no necesita fusionar los cambios aguas arriba con su copia local, utilizando git checkout masterentonces git merge upstream/master?
Sparhawk

@Sparhawk No, no necesita fusionar sus cambios en el maestro que reside en su bifurcación. La solicitud de extracción al otro repositorio puede basarse únicamente fuera de la sucursal. Sin embargo, generalmente será una buena práctica actualizar también el maestro de la bifurcación a medida que avanza, de modo que cambie al repositorio "real" y con frecuencia vuelva a estar en el bucle en su repositorio bifurcado.
ely

1
@HimanshuShekhar sí, pero debe usar la aplicación de escritorio github o su API. El navegador es más fácil para mí.
Tim Peterson

70

Para realizar una solicitud de extracción, debe realizar los siguientes pasos:

  1. Bifurca un repositorio (al que deseas hacer una solicitud de extracción). Simplemente haga clic en el botón de la horquilla en la página del repositorio y tendrá un repositorio de github separado precedido por su nombre de usuario de github.
  2. Clone el repositorio en su máquina local. El software Github que instaló en su máquina local puede hacer esto por usted. Haga clic en el botón de clonar al lado del nombre del repositorio.
  3. Realizar cambios / confirmaciones locales en los archivos
  4. sincronizar los cambios
  5. vaya a su repositorio bifurcado github y haga clic en el botón verde "Comparar y revisar" junto al botón de rama. (El botón tiene icono - sin texto)
  6. Se abrirá una nueva página que muestra sus cambios y luego haga clic en el enlace de solicitud de extracción, que enviará la solicitud al propietario original del repositorio que bifurcó.

Me tomó un tiempo entender esto, espero que esto ayude a alguien.


3
No estaba claro para mí que necesitara bifurcar un repositorio antes de poder hacer una solicitud de extracción. Pensé que un commit empujado iría a algún tipo de rama pendiente que tiene acceso de escritura pública y luego se fusionó desde allí. ¡Gracias!
Chris Arena

16

Comencé un proyecto para ayudar a las personas a hacer su primera solicitud de extracción de GitHub. Puedes hacer el tutorial práctico para hacer tu primer PR aquí

El flujo de trabajo es simple como

  • Bifurca el repositorio en github
  • Obtenga la URL de clon haciendo clic en el botón de repositorio de clonación
  • Ve a la terminal y corre git clone <clone url you copied earlier>
  • Haz una rama para los cambios que estás haciendo git checkout -b branch-name
  • Haz los cambios necesarios
  • Compromete tus cambios git commit
  • Empuje sus cambios a su bifurcación en GitHub git push origin branch-name
  • Ve a tu bifurcación en GitHub para ver un Compare and pull requestbotón
  • Haga clic en él y proporcione los detalles necesarios.

15

Para aquellos de nosotros que tenemos una cuenta de github.com, pero solo recibimos un mensaje de error desagradable cuando escribimos "git" en la línea de comandos, aquí está cómo hacerlo todo en su navegador :)

  1. Igual que Tim y Farhan escribieron: Bifurca tu propia copia del proyecto: Paso 1: tenedor
  2. Después de unos segundos, será redirigido a su propia copia bifurcada del proyecto: Paso 2
  3. Navegue a los archivos que necesita cambiar y haga clic en "Editar este archivo" en la barra de herramientas: Paso 3: edita un archivo
  4. Después de editar, escriba algunas palabras que describan los cambios y luego "Confirmar cambios", igual de bien para la rama maestra (ya que esta es solo su propia copia y no el proyecto "principal"). Paso 4: comprometer los cambios
  5. Repita los pasos 3 y 4 para todos los archivos que necesita editar y luego vuelva a la raíz de su copia del proyecto. Allí, haga clic en el botón verde "Comparar, revisar ...": Paso 5: Comience a enviar
  6. Finalmente, haga clic en "Crear solicitud de extracción" ... y luego en "Crear solicitud de extracción" nuevamente después de haber verificado dos veces el encabezado y la descripción de su solicitud: ingrese la descripción de la imagen aquí

3

Seguí las instrucciones de tim peterson pero creé una rama local para mis cambios. Sin embargo, después de presionar, no estaba viendo la nueva sucursal en GitHub. La solución fue agregar -u al comando push:

git push -u origin <branch>

¿Notó los 2 nombres de usuario en la URL de arriba? el primero es tim-petersonel segundo esDwolla
tim peterson

3
Además, esto es mejor como un comentario a mi respuesta. Puede obtener algunos votos negativos.
Tim Peterson

1

Escribí un programa bash que hace todo el trabajo de configurar una rama de relaciones públicas para usted. Realiza una bifurcación si es necesario, se sincroniza con el flujo ascendente, configura el control remoto ascendente, etc. y solo necesita confirmar sus modificaciones, enviar y enviar un RP.

Así es como lo ejecutas:

github-make-pr-branch ssh your-github-username orig_repo_user orig_repo_name new-feature

Encontrará el programa aquí y su repositorio también incluye una guía paso a paso para realizar el mismo proceso manualmente si desea comprender cómo funciona, y también información adicional sobre cómo mantener su rama de características actualizada. fecha con el maestro ascendente y otros tidbits útiles.


0

La solicitud de extracción de GitHub más simple es de la interfaz web sin usar git.

  1. Registre una cuenta de GitHub, inicie sesión y luego vaya a la página en el repositorio que desea cambiar.
  2. Haz clic en el ícono de lápiz ,

    busque texto cerca de la ubicación, realice las ediciones que desee y luego obtenga una vista previa para confirmar. Dele al cambio propuesto una descripción de hasta 50 caracteres y, opcionalmente, una descripción extendida, luego haga clic en el botón Proponer cambio de archivo .

  3. Si está leyendo esto, no tendrá acceso de escritura al repositorio (carpetas de proyectos), por lo que GitHub creará una copia del repositorio (en realidad una rama) en su cuenta. Haga clic en el botón Crear solicitud de extracción .

  4. Dé una descripción a la solicitud de extracción y agregue cualquier comentario, luego haga clic en el botón Crear solicitud de extracción .
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.