Unisci la richiesta pull a un ramo diverso da quello predefinito, in Github


122

Una richiesta pull arriva nel mio repository ospitato su Github. Per impostazione predefinita, viene unito al masterramo.

C'è un modo per me di cambiare in quale ramo le modifiche verrebbero fuse?

Risposte:


86

A partire dal 15.08.2016 GitHub consente di modificare il ramo di destinazione di una richiesta pull tramite la GUI. Fai clic su Editaccanto al titolo, quindi seleziona il ramo dal menu a discesa.

immagine dello schermo

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


1
Questa dovrebbe essere la risposta giusta a questa domanda (dopo l'aggiornamento a GitHub ie).
stuxnetting

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

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

@cgogolin Grazie per averlo sottolineato - anch'io ero confuso, finché non ho letto il tuo commento e ho cliccato sul pulsante Modifica.
mhucka

Github avverte che "Quando modifichi il ramo di base della tua richiesta pull, alcuni commit potrebbero essere rimossi dalla sequenza temporale." e "Alcuni commit del vecchio ramo di base potrebbero essere rimossi dalla sequenza temporale." Qualche idea su cosa significhi?
Matthias Fripp

55

Il mittente può cambiarlo quando emette la richiesta pull, ma una volta emessa non puoi cambiarla.

D'altra parte, puoi unire manualmente il loro ramo e push, cosa che faccio regolarmente per richieste pull errate.

Potresti trovare la hubgemma utile per lavorare con i componenti della richiesta pull.

Quella gemma avvolge il processo manuale, che è:

  1. Aggiungi un telecomando per il fork alla cassa locale.
  2. Prendi quel telecomando.
  3. git checkout ${target_branch} && git merge ${remote}/${branch}
  4. git push origin ...

1
Se unisco e spingo manualmente, Github si renderà conto che la richiesta pull è stata effettivamente completata? Eventuali suggerimenti su come unire da un repository separato remoto (il fork)?
eoinoc

3
Non sono sicuro, ma non direttamente, perché la modifica non si è unita al ramo di destinazione, quindi la richiesta pull non è stata completata come definito. Devi chiuderlo manualmente. Per quanto riguarda i puntatori, vedere il commento modificato.
Daniel Pittman

Consiglierei di usarlo git merge --no-ff ...come menzionato da @GuillermoMansilla nella sua risposta.
jjmontes

3
"Una volta emesso non puoi cambiarlo" - Non è più il caso da agosto 2016! Vedi la risposta di @maliayas di seguito: stackoverflow.com/a/38985999/12484
Jon Schneider

1
Ho seguito questa procedura oggi (3 marzo 2017). Ho scaricato la richiesta di pull in un altro ramo e ho apportato alcune correzioni aggiuntive, quindi mi sono unito al master. Una volta che i commit dalla richiesta pull sono finiti nel master, GitHub ha chiuso automaticamente la richiesta pull.
Ivan Krivyakov

14

Un'alternativa all'uso della gemma dell'hub menzionata da altre risposte è usare la riga di comando per unire le richieste pull localmente , che ti consente di fare:

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

I comandi precedenti funzionano direttamente solo se aggiungi prima la seguente riga al tuo .git/configfile:

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

Ciò che fa è consentire di scaricare TUTTE le richieste pull. Poiché ciò potrebbe non essere desiderato per grandi repository, GitHub ha modificato le istruzioni per presentare la git fetch origin pull/ID/head:BRANCHNAMEsintassi, che evita la modifica del file di configurazione e scarica solo quella singola richiesta pull.


8

Sebbene non sia possibile modificare la richiesta pull esistente poiché non è tua, puoi facilmente crearne una nuova se il relativo repository di origine esiste ancora, sì, anche se è di qualcun altro.

Vai al repository del mittente, quindi crea una nuova richiesta pull nel suo repository utilizzando gli stessi commit ma assicurati di impostare correttamente il ramo di destinazione corretto.

Quindi torna al tuo repository e accetta la nuova richiesta di pull. Ecco!


Funziona se hanno cambiato il loro repository? Come ci si assicura che siano "gli stessi commit"?
ragerdl

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

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

8

Non c'è niente di sbagliato nella soluzione di Daniel Pittman, tuttavia tratterei quelle unioni come "nessun avanzamento veloce", ovvero, cambiando il passaggio numero 3 per:

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

Utilizzando --no-ff, la cronologia sarà più facile da leggere. Dirà chiaramente che i $ncommit vengono da $branche ti renderà la vita più facile se hai bisogno di ripristinare qualcosa fatto in quel ramo.

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

Dopo aver fatto l'unione, il tuo git cli ti chiederà di scrivere un messaggio, generalmente apparirà un messaggio generico che dice qualcosa come

Unisci il ramo di monitoraggio remoto "utente / ramo" nel tuo ramo

Assicurati di modificare il messaggio e includere un riferimento al numero di richiesta pull. Ovvero: (supponendo che il numero di richiesta pull sia 123)

Unisci il ramo di monitoraggio remoto "utente / ramo" nel tuo ramo

rifs # 123 risolvendo qualunque cosa ...

Quindi la prossima volta che visiti la tua pagina dei problemi / pull-request di GitHub e controlli quella particolare richiesta pull, vedrai il tuo messaggio con un link per eseguire il commit in cui hai fatto l'unione.

Ecco uno screenshot di ciò che intendo.

inserisci qui la descrizione dell'immagine


6

Per farlo vai alla home page del tuo repository, fai clic su branch e cambia il branch predefinito da master a qualcos'altro, nel mio caso "dev".

Dopodiché, ogni volta che qualcuno crea una richiesta pull, il mergepulsante fonderà automaticamente la richiesta in "dev" anziché in master.

inserisci qui la descrizione dell'immagine


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

4
Non c'è bisogno di ringraziarci per la regolazione / modifica. È qualcosa che facciamo per il sito. Continua a scrivere buone risposte, grazie abbastanza.
Tin Man il
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.