Come aprire più richieste pull su GitHub


139

Quando apro una richiesta pull su GitHub .
Tutti i commit dalla mia ultima richiesta e tutti i nuovi vengono aggiunti automaticamente a questa richiesta .

Non riesco a controllare quali commit vengono aggiunti e quali no.
Quando provo ad aprire un'altra richiesta pull, viene visualizzato l'errore "Spiacenti, c'è già una richiesta pull".

Esiste un modo semplice per aprire più richieste pull senza dover fare confusione con la riga di comando?

Risposte:


116

Le richieste pull sono basate su un ramo.
L'unico modo per aprire una richiesta pull per più commit è:

  1. Isolarli nel loro ramo .
  2. Apri le richieste pull da lì.

3
Va bene, ho pensato che fosse solo con il maestro. Quindi, ciò che vuoi dire è che posso creare molti rami (ad esempio: funzioni git flow) e fare richieste pull per ciascuno di essi ... Andando a provare!
Ziyan Junaideen,

8
Ho appena scoperto che la filiale ha conservato la cronologia dei precedenti commit, quindi una richiesta pull contro l'upstream include ancora tutti i commit.
anguilla ghEEz

2
Ciao @ anguilla, hai capito cosa fare al riguardo? Come creare PR isolate senza che vengano mostrate le modifiche da altri rami?
Jonathan Cross,

3
Questo non risolve il problema: quando provo a creare un PR, vengono confrontati entrambi i rami (con almeno un commit ciascuno). Che cosa sto facendo di sbagliato?
MERose,

1
@eelghEEz Dovresti creare un nuovo ramo, git cherry-pick tutti i commit che vuoi per questo ramo e quindi fare una richiesta pull da questo ramo. È una caratteristica di progettazione molto importante di git che ogni commit dipenda dal suo precedente commit, e i commit in git non dovrebbero essere considerati solo come una patch, ma come una patch che sa quale patch è stata applicata prima di questo. Quindi questo è il motivo per cui si dovrebbe creare una nuova filiale con nuovi commit, le cui differenze sono forse ancora le stesse, ma i cui collegamenti con i commit precedenti sono diversi.
MD

11

Il modo più semplice che ho trovato per farlo è con il comando hub ( https://github.com/defunkt/hub ).

Dal tuo argomento ("funzionalità" in questo esempio) per cui desideri creare una richiesta pull, puoi semplicemente eseguire:

git pull-request

(ricordati di spingere prima il tuo ramo!)

E aprirà una nuova richiesta pull su GitHub per "YOUR_USER: feature".

Se hai già creato un problema su GitHub, puoi anche allegare una richiesta pull a quel problema esistente (cosa che non puoi fare dall'interfaccia utente Web):

$ git pull-request -i 123
[ attached pull request to issue #123 ]

2

In realtà PUOI farlo senza creare un altro ramo, ma ci vuole un po 'di gioco.
Ecco i passaggi:

  1. Identifica i due intervalli di commit che desideri estrarre. Ecco cosa userò per un esempio:
    (altro / master) A -> B -> C -> D -> E (tuo / master)
    Diciamo che vuoi inserire B e C in una richiesta, e D & E in un altro.
  2. Fai una richiesta pull. Chiedi al lato sinistro ("Base") di eseguire il commit A. Per il lato destro ("head"), digita il numero di commit di C.
  3. Scrivi la descrizione per la tua prima richiesta.
  4. Fai un'altra richiesta. Per la base, digita il numero di commit di C e, per la testa, inserisci E (tuo / maestro).
  5. Scrivi la descrizione

A mio avviso, la richiesta pull vede il commit C come punto di diramazione. O qualcosa.


Devi lasciare altro / master come lato sinistro anche se stai aggiungendo un numero di commit dal tuo / master. Inoltre, questo metodo non consente di aggiungere nuovi commit alla richiesta di unione, nel caso siano necessarie ulteriori modifiche.
frisco,

Ho postato una sorta di seguito a questa risposta, contrariamente ad alcune informazioni su Github, vedi stackoverflow.com/questions/23159860
Mark Bennett,

Vedo che ciò creerebbe due PR che sembrano corrette, in quanto ognuna conteneva esattamente i commit desiderati. Ma, per essere espliciti, fa la cosa giusta quando vengono uniti? Come in, posso vedere che il primo PR unirebbe correttamente B & C in altro / master. Ma quando il 2 ° PR si fonde, come fa a sapere in quale ramo unirsi? (Dal momento che è stato creato su commit 'C', non su altro / master) Importa in quale ordine le PR vengono unite? (presumibilmente)
Jonathan Hartley,

1

Quando si inizia inizialmente a creare la richiesta pull, se si aprono due moduli separati per una nuova richiesta pull, sarà possibile crearli fintanto che sono puntati su rami diversi da unire. Ad esempio, potrei formulare due richieste separate, una da unire in master e un'altra da unire in test.


1

Sono nuovo di Git e GitHub e ho avuto la stessa domanda del PO.

Ho trovato una soluzione, che probabilmente non era disponibile al momento del PO.

Situazione: hai 3 modifiche e vuoi che ognuna sia costruita sulla precedente e ognuna abbia la propria richiesta pull (PR).

Problema: quando si crea il primo PR che tenta di inserire lo sviluppo in master, tutto sembra a posto, ma dopo aver apportato le modifiche al secondo PR e unirle (utilizzando lo stesso ramo), tutte le modifiche sono nello stesso PR .

Mini soluzione: creare una nuova filiale

git branch mini_change_2
git checkout mini_change_2

Ora si invia il codice a GitHub e si crea il PR, ma per impostazione predefinita è Pull da mini_change_2 a master, tranne per il fatto che master non ha ancora le modifiche dal primo PR, quindi include tutte le modifiche da PR1 e PR2.

Soluzione migliore: specificare a quale ramo si sta unendo in PR2.

Non accettare le impostazioni predefinite solo quando crei il secondo PR, supponi che stai per tirare mini_chnage_2 su Sviluppo, questo mostrerà solo le modifiche in mini_change_2

Ora crea un nuovo ramo mini_change_3 e PR che in mini_change_3.

Il problema si presenta quando inizi a fonderli ... ma questo è un esercizio diverso.

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.