2012-02-03 11 views

risposta

26

As of 15.08.2016 GitHub permette di cambiare ramo bersaglio di una richiesta di pull tramite GUI:

screenshot

è ora possibile modificare il ramo di base di una richiesta di pull aperta. Dopo aver creato una richiesta di pull, è possibile modificare il ramo di base in modo che le modifiche nella richiesta di pull vengano confrontate con un ramo diverso. Modificando il ramo di base della tua richiesta di pull originale invece di aprirne uno nuovo con il ramo di base corretto, sarai in grado di mantenere un prezioso lavoro e discussioni.

+1

Questa dovrebbe essere la risposta giusta a questa domanda (dopo l'aggiornamento a GitHub i.e.). – stuxnetting

+0

Questa funzione non sembra più esistere (a partire dal 2018-02-15), vero? In una recente richiesta di pull, il ramo di destinazione viene visualizzato nello stesso carattere blu su sfondo azzurro come il repository/ramo di origine e non più un pulsante. – cgogolin

+0

Ah! Lo fa! È necessario prima fare clic su "Modifica" (che non è ovvio dallo screenshot precedente). Ho trascurato questo. Scusate. – cgogolin

52

Il mittente può cambiarlo quando rilascia la richiesta di pull, ma una volta emesso non è possibile cambiarlo.

D'altra parte, è possibile unire manualmente il ramo e il push, cosa che faccio semestralmente per richieste pull trascurate.

Potreste trovare utile il hub gem per lavorare con i componenti della richiesta di pull.

quella gemma avvolge il processo manuale, che è:

  1. Add a remote per la forcella al checkout locale.
  2. Recupera quel telecomando.
  3. git checkout ${target_branch} && git merge ${remote}/${branch}
  4. git push origin ...
+1

Se mi fondo e spingere manualmente, sarà Github conto che la richiesta di pull è stata effettivamente completata? Qualche suggerimento su come unire da un repository remoto separato (la forcella)? – eoinoc

+3

Non sono sicuro, ma non direttamente - perché la modifica non si è fusa nel ramo di destinazione, quindi la richiesta pull non è stata completata come definito. Hai bisogno di chiuderlo manualmente. Per quanto riguarda i puntatori, vedi il commento modificato. –

+0

Consiglierei di usare 'git merge --no-ff ...' come @GuillermoMansilla menziona nella sua risposta. – jjmontes

7

Non c'è niente di sbagliato con la soluzione di Daniel Pittman, tuttavia vorrei trattare tali unioni come "avanti senza fretta", vale a dire, cambiando numero di fase 3 per:

git checkout ${target_branch} && git merge --no-ff ${remote}/${branch} 

Utilizzando --no-ff, la cronologia sarà più semplice da leggere. Dirà chiaramente che i commit $n provengono da $branch e ti renderanno la vita più facile se devi ripristinare qualcosa fatto in quel ramo.

Per rispondere anche alla domanda di eoinoc e dare un ulteriore suggerimento:

Dopo aver fatto l'unione, il vostro cli git verrà chiesto di scrivere un messaggio, in genere un messaggio generico verranno visualizzati dicendo qualcosa come

Merge remote-tracking 'user/loro ramo' ramo nel vostro ramo

assicurarsi di modificare quel messaggio e comprendono un riferimento al numero di richiesta di pull. Cioè: (Supponendo che il numero di richiesta di pull è 123)

Merge remote-tracking ramo 'utente/la-branch' nel vostro ramo

arbitri # 123 solving qualunque cosa ...

Così la prossima volta che visiti la tua pagina di problemi di github/pull-requests e controlli quella particolare richiesta di pull, vedrai il tuo messaggio con un link per il commit dove hai fatto l'unione.

Ecco uno screenshot di cosa intendo.

enter image description here

12

Un'alternativa all'utilizzo la gemma hub menzionato da altre risposte è quello di use the command line to merge locally pull requests, che ti permette di fare:

$ git fetch origin 
$ git checkout *target_branch* 
$ git merge pr/XXX 
$ git push origin *target_branch* 

I comandi di cui sopra solo lavorare direttamente se prima di aggiungere la seguente riga per il tuo file .git/config:

fetch = +refs/pull/*/head:refs/remotes/symbolic_name_origin_or_upstream/pr/* 

Quello che fa è che ti permette di scaricare le richieste di pull ALL. Dal momento che ciò potrebbe non essere richiesto per enormi repository, GitHub ha modificato le istruzioni per caratterizzare la sintassi git fetch origin pull/ID/head:BRANCHNAME, che evita la modifica del file di configurazione e scarica solo quella richiesta di pull singolo.

7

Sebbene non sia possibile modificare la richiesta di pull esistente in quanto non è la tua, puoi facilmente crearne una nuova se il relativo archivio di sorgenti esiste ancora - sì, anche se è di qualcun altro.

Passare al repository del mittente, quindi creare una nuova richiesta di pull nel proprio repository utilizzando gli stessi commit ma assicurarsi di impostare correttamente il ramo di destinazione corretto.

Quindi tornare al proprio repository e accettare la nuova richiesta di pull. Ecco!

+0

Funziona se hanno cambiato il loro repository? Come ci si assicura che sia "lo stesso commit?" – ragerdl

+0

@ragerdl - Se stai sviluppando utilizzando un modello 'feature-per-branch', puoi creare un PR con un ramo contro un ramo upstream, e dovrebbe contenere gli stessi commit. – geerlingguy

+2

L'unico modo per farlo direttamente su GitHub, senza accesso a un repository locale. – kopischke

5

Per farlo, vai alla home page del tuo repository, fai clic sui rami e cambia il ramo predefinito da master in qualcos'altro, nel mio caso "dev".

Dopodiché, ogni volta che qualcuno crea una richiesta di pull, il pulsante merge automaticamente unirà la richiesta in "dev" anziché in master.

enter image description here

+0

grazie per la correzione di errore @the Tin Man Lo apprezzo – abbood

+2

Non c'è bisogno di ringraziarci per la regolazione/modifica. È qualcosa che facciamo per il sito. Continua a scrivere buone risposte, è abbastanza grazie. –

Problemi correlati