Come eseguire una richiesta pull di GitHub


283

Come faccio a creare e / o inviare una richiesta pull a un altro repository ospitato su GitHub?


2
Questo non è sufficientemente spiegato nelle pagine di aiuto di GitHub ?
lanzz,

27
@lanzz No, la pagina di aiuto non include alcuni suggerimenti utili che vorrei sapere prima di fare le mie prime richieste pull (vedi sotto).
VonC,

9
@ianzz ovviamente la pagina di Github è "sufficiente", ma ci sono molti modi per imparare. Quello che mi sono sforzato di fare è stato fare un tutorial per principianti. Quello che ho trovato carente nella spiegazione di Github era che: 1) non era contenuto in una fonte (due pagine che non sono chiaramente collegate), 2) non era sintetico (quelle pagine sono molto lunghe, lunghe = schiaccianti), 3) era non spiegato in termini umani nelle sezioni chiave. Nell'insegnamento, è sempre difficile per un insegnante più esperto sapere cosa non sa un principiante. Mettermi nei panni del principiante era il mio obiettivo nello scrivere questo.
Tim Peterson,

12
Lungamente può significare travolgente che può significare abort = nessun apprendimento. Si può "finire per comprendere il processo in questione" attraverso molte strade che ovviamente non sarebbero solo una di queste. Per porre fine alla guerra delle fiamme, non c'è bisogno di rispondere, capisco da dove vieni.
Tim Peterson,

8
Fai una richiesta pull dalla tua forcella. Non era assolutamente il mio presupposto originale.
Derek Illchuk,

Risposte:


236

(Oltre alla pagina ufficiale " Uso di richieste pull " di GitHub Help ,
vedere anche " Forking vs. Branching in GitHub ", " Qual è la differenza tra origine e upstream in GitHub ")

Suggerimenti per le coppie sulle richieste pull:

Supponendo che tu abbia prima biforcuto per la un repository , ecco cosa dovresti fare in quel fork che possiedi:

  • creare un ramo : isola le tue modifiche in un ramo. Non creare una richiesta pull da masterdove potresti essere tentato di accumulare e mescolare più modifiche contemporaneamente.
  • rebase quel ramo : anche se hai già fatto una richiesta pull da quel ramo, riutilizzandola origin/master(assicurandoti che la patch funzioni ancora) aggiornerà automagicamente la richiesta pull (non c'è bisogno di fare clic su nulla)
  • aggiorna quel ramo : se la tua richiesta pull viene rifiutata, puoi semplicemente aggiungere nuovi commit e / o ripetere completamente la cronologia: attiverà di nuovo la tua richiesta pull esistente.
  • "focalizzare" quel ramo : cioè, rendere il suo argomento "stretto", non modificare migliaia di classi e tutte le app, solo aggiungere o correggere una funzione ben definita, mantenendo le modifiche piccole .
  • elimina quel ramo : una volta accettato, puoi tranquillamente eliminare quel ramo sul tuo fork (e git remote prune origin). La GUI di GitHub ti proporrà di eliminare il tuo ramo nella pagina di richiesta pull.

Nota: per scrivere la richiesta pull stessa, vedere " Come scrivere la richiesta pull perfetta " (gennaio 2015, GitHub)


Marzo 2016: Nuova opzione pulsante di unione PR: vedi " Github squash commette dall'interfaccia web su richiesta pull dopo i commenti di revisione? ".

schiacciare

Il manutentore del pronti contro termine può scegliere merge --squashtali commit PR.


Dopo una richiesta pull

Per quanto riguarda l'ultimo punto, dal 10 aprile 2013, " Pulsante di unione riprogettato ", il ramo viene eliminato per te:

nuovo pulsante di unione

Anche l'eliminazione dei rami dopo l'unione è stata semplificata.
Invece di confermare l'eliminazione con un passaggio aggiuntivo, rimuoviamo immediatamente il ramo quando lo elimini e forniamo un comodo collegamento per ripristinare il ramo nel caso in cui sia necessario di nuovo .

Ciò conferma la migliore pratica di eliminare il ramo dopo aver unito una richiesta pull.


pull-request vs. request-pull


e-note per "reposotory" (sic)

<humour>

Quella (richiesta pull) non è nemmeno definita correttamente da GitHub!

Fortunatamente, una vera organizzazione di notizie commerciali lo saprebbe, e c'è una e-note per sostituire pull-sostituisci con 'e-note' :

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

Quindi, se i tuoi pronti contro termine o Tory ha bisogno di un e-note ... chiedere a Fox Business . Sono al corrente.

</humour>


2
- @ VonC grazie per questo. Ti dispiacerebbe fornire del codice per sottolineare come ciò che hai detto differisce da quello che ho detto? La decisione branchvs. mastersembra critica per prendere la risposta del mio / Github da una soluzione teorica a qualcosa che si vorrebbe effettivamente usare.
Tim Peterson,

1
@timpeterson il fatto che è possibile modificare completamente la cronologia all'interno di quel ramo e che aggiornerà automaticamente la richiesta pull, è la chiave qui: perché una richiesta pull deve essere fatta sull'ultimo progetto upstream. Se quel repository upstream ha nuovi commit, devi rifare il tuo ramo sopra di esso (modificando la cronologia di quel ramo) e rimandarlo al tuo fork: che aggiornerà automaticamente la tua richiesta pull (basata sullo stesso ramo).
VonC,

4
Non capisco la parte del rebasing. Che cosa fa? ( questa pagina suona come scienza missilistica ma credo che non lo sia). Quale comando impartiresti a quel punto che "ribattezza"?
Camilo Martin

1
@CamiloMartin se sei nel tuo ramo PR, allora git pull --rebase upstream/masterva bene davvero.
VonC

1
@vikramvi master è un ramo in comune con il repository originale che hai biforcato. Quel ramo dovrebbe sempre rispecchiare il repository originale. Isoli le tue correzioni in un ramo per il tuo PR. Usa master solo come un modo per sapere cosa c'è nel repository originale (e per riordinare il tuo ramo di correzione sopra di esso, per garantire una facile unione di richiesta pull)
VonC

202

Per sapere come effettuare una richiesta pull ho appena seguito due pagine di aiuto separate su Github (collegate sotto come punti elenco). I seguenti comandi da riga di comando sono per la parte 1 . La seconda parte , l'effettiva richiesta pull, viene eseguita interamente sul sito Web di 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 : fork del repo di qualcuno: https://help.github.com/articles/fork-a-repo

    1. fai clic sul pulsante 'fork' sul repository a cui vuoi contribuire, in questo caso: repository PHP di Dwolla Dwolla (Dwolla / dwolla-php)
    2. ottenere l'URL per il fork appena creato, in questo caso: https://github.com/tim-peterson/dwolla-php.git (tim-peterson / dwolla-php)
    3. digita la git clone->cd dwolla-php->git remote->git fetchsequenza sopra per clonare il fork da qualche parte nel computer (ad esempio, "copia / incolla" in, in questo caso:third_party TimPeterson$ :) e sincronizzarlo con il repository principale (Dwolla / dwolla-php)
    4. apporta le modifiche al tuo repository locale
    5. digitare la git add->git commit->git pushsequenza sopra per inviare le modifiche al repository remoto, ovvero il fork su Github (tim-peterson / dwolla-php)
  • Parte 2 : richiesta pull: https://help.github.com/articles/using-pull-requests

    1. vai alla pagina web del tuo fork su Github ( https://github.com/tim-peterson/dwolla-php )
    2. fare clic sul pulsante "pull-request"
    3. assegna un nome a pull-request, inserisci i dettagli delle modifiche apportate, fai clic sul pulsante Invia.
    4. hai finito!!

4
- @ alexgray, ho lasciato i prompt di bash, ad es. Tims-MacBook-Pro:third_party TimPeterson$perché questo è un tutorial per principianti e questi suggerimenti aiutano a orientare l'utente.
Tim Peterson,

1
Sì. Grazie. Un esempio funzionante che posso seguire. Perché non hai quel git hub?
Sevenearths

Dopo git fetch upstream, non hai bisogno di unire le modifiche a monte con la tua copia locale, usando git checkout masterallora git merge upstream/master?
Sparhawk,

@Sparhawk No, non è necessario unire le modifiche al master che risiede nel fork. La richiesta pull nell'altro repository può essere basata esclusivamente al di fuori del ramo. Tuttavia, di solito sarà buona pratica aggiornare anche il master del fork mentre procedi, in modo che cambi al repository "reale" e spesso riportato nel loop nel repository biforcato.
ely

1
@HimanshuShekhar sì, ma devi usare l'app desktop github o la loro API. Il browser è più facile per me.
Tim Peterson,

70

Per effettuare una richiesta pull è necessario eseguire le seguenti operazioni:

  1. Fork un repository (a cui si desidera effettuare una richiesta pull). Basta fare clic sul pulsante fork nella pagina del repository e avrai un repository github separato preceduto dal tuo nome utente github.
  2. Clonare il repository sul computer locale. Il software Github che hai installato sul tuo computer locale può farlo per te. Fare clic sul pulsante clone accanto al nome del repository.
  3. Apporta modifiche / commit locali ai file
  4. sincronizzare le modifiche
  5. vai al tuo repository biforcuto github e fai clic sul pulsante verde "Confronta e rivedi" accanto al pulsante di diramazione. (Il pulsante ha l'icona - nessun testo)
  6. Si aprirà una nuova pagina che mostra le modifiche e quindi fa clic sul collegamento per la richiesta pull, che invierà la richiesta al proprietario originale del repository che hai biforcato.

Mi ci è voluto un po 'per capire questo, spero che questo possa aiutare qualcuno.


3
Non mi era chiaro che fosse necessario effettuare il fork di un repository prima di poter effettuare una richiesta pull. Ho pensato che un commit spinto sarebbe andato in una sorta di ramo in sospeso che ha accesso in scrittura pubblica e poi si sarebbe unito da lì. Grazie!
Chris Arena,

16

Ho avviato un progetto per aiutare le persone a fare la loro prima richiesta pull su GitHub. Puoi fare il tutorial pratico per fare il tuo primo PR qui

Il flusso di lavoro è semplice come

  • Fork il repo in github
  • Ottieni l'URL clone facendo clic sul pulsante repository clone
  • Vai al terminale ed esegui git clone <clone url you copied earlier>
  • Crea un ramo per le modifiche che stai apportando git checkout -b branch-name
  • Apporta le modifiche necessarie
  • Impegna le tue modifiche git commit
  • Invia le modifiche al fork su GitHub git push origin branch-name
  • Vai al tuo fork su GitHub per vedere un Compare and pull requestpulsante
  • Cliccaci sopra e fornisci i dettagli necessari

15

Per quelli di noi che hanno un account github.com, ma ricevono un brutto messaggio di errore quando digitiamo "git" nella riga di comando, ecco come fare tutto nel tuo browser :)

  1. Come Tim e Farhan hanno scritto: Fork la tua copia del progetto: Passaggio 1: forcella
  2. Dopo alcuni secondi, verrai reindirizzato alla tua copia biforcuta del progetto: Passo 2
  3. Passare ai file che è necessario modificare e fare clic su "Modifica questo file" nella barra degli strumenti: Passaggio 3: modifica un file
  4. Dopo la modifica, scrivi alcune parole che descrivono le modifiche e poi "Salva modifiche", anche nel ramo principale (poiché questa è solo la tua copia e non il progetto "principale"). Passaggio 4: confermare le modifiche
  5. Ripeti i passaggi 3 e 4 per tutti i file che devi modificare, quindi torna alla radice della tua copia del progetto. Lì, fai clic sul pulsante verde "Confronta, rivedi ...": Passaggio 5: iniziare a inviare
  6. Infine, fai clic su "Crea richiesta di pull" ..e poi "Crea richiesta di pull" di nuovo dopo aver controllato doppio titolo e la descrizione di richiesta: inserisci qui la descrizione dell'immagine

3

Ho seguito le istruzioni di Tim Peterson ma ho creato una filiale locale per le mie modifiche. Tuttavia, dopo aver spinto non vedevo il nuovo ramo in GitHub. La soluzione era aggiungere -u al comando push:

git push -u origin <branch>

hai notato i 2 nomi utente nell'URL sopra? il primo è tim-petersonil secondo èDwolla
tim peterson,

3
Inoltre, è meglio come commento alla mia risposta. Potresti ottenere alcuni voti negativi.
Tim Peterson,

1

Ho scritto un programma bash che fa tutto il lavoro di creazione di un ramo PR per te. Esegue il biforcazione, se necessario, la sincronizzazione con l'upstream, l'impostazione del telecomando upstream, ecc. E devi solo eseguire il commit delle modifiche, inviare e inviare un PR.

Ecco come eseguirlo:

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

Troverete il programma qui e il suo archivio comprende anche una guida step-by-step per eseguire manualmente lo stesso processo se vuoi capire come funziona, e le informazioni anche in più su come mantenere il vostro ramo di caratteristica up-to data con il master upstream e altre notizie utili.


0

Il Pull Request più semplice GitHub è dall'interfaccia web senza utilizzare git.

  1. Registra un account GitHub, accedi quindi vai alla pagina nel repository che desideri modificare.
  2. Fai clic sull'icona a forma di matita ,

    cerca il testo vicino alla posizione, apporta le modifiche desiderate, quindi visualizzale in anteprima per confermare. Fornire alla modifica proposta una descrizione di massimo 50 caratteri e, facoltativamente, una descrizione estesa, quindi fare clic sul pulsante Proponi modifica file .

  3. Se stai leggendo questo non avrai accesso in scrittura al repository (cartelle di progetto), quindi GitHub creerà una copia del repository (in realtà un ramo) nel tuo account. Fai clic su Crea richiesta pull pulsante .

  4. Fornisci una descrizione alla richiesta pull e aggiungi eventuali commenti, quindi fai clic sul pulsante Crea richiesta pull .
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.