2013-08-19 11 views
11

Sto lavorando con una squadra e stiamo facendo branch delle funzionalità e richieste pull.Pull request su github - mostrando commit rebased dal master

Ho creato un ramo, ci ho lavorato un po 'e ho anche lavorato poco sul master.

Poi, ho ribattezzato il ramo contro il maestro. Ora voglio fare una richiesta di pull.

Tuttavia, in GitHub, la richiesta pull mostra tutti i commit avvenuti tra quando ho creato il ramo e ora - i commit effettuati su questo ramo di funzione e i commit che sono sul master che si sono verificati nel mezzo.

Questo è un disordine rumoroso - sto facendo qualcosa di sbagliato? Mi piacerebbe che la richiesta di pull mostrasse solo i commit che ho fatto, poiché gli altri commit sono già su entrambi i master e sul mio ramo, nessuna differenza.

L'unico suggerimento che vedo è quello di creare un altro ramo basato sull'ultimo master upstream e il comando cherry picking dal mio ramo su di esso.

risposta

3

Devi aver fatto qualcosa di sbagliato. Come risultato del rebase, dovresti avere solo le revisioni univoche che seguono l'ultimo commit in master, e il tuo branch dovrebbe essere pronto per un forward veloce.

Ho eseguito un test rapido ora e, naturalmente, la richiesta di pull mostra solo le revisioni univoche come previsto. Non ci dovrebbero essere confusione rumorosa, e non c'è bisogno di cogliere le ciliegie. Sembra che ci sia qualcosa che non va tra i tuoi rami.

Provare a rebase di nuovo. Se si basa correttamente in precedenza, questo dovrebbe essere un NO-OP ora. Acquista tuo ramo, e cercare di rebase di nuovo sulla parte superiore del maestro, in questo modo:

git checkout yourbranch 
git rebase master 

Questo dovrebbe stampare Current branch will-have-rebased is up to date., e dopo aver premuto il ramo a GitHub, si dovrebbe essere in grado di creare una richiesta di pull dove solo la si presentano i commit unici. Non vedo perché no.

Importante: tenere presente che se si fosse spinto la filiale prima rebasing, quindi Git rifiuterà di spingere di nuovo dopo rebasing. Questo perché in generale non si dovrebbe riscrivere la cronologia dei rami pubblici e tutte le guide su rebasing spiegano questo punto. Se vuoi spingere il ramo comunque, riscrivendo la sua cronologia su github, aggiungi il flag --force.

+1

Che funziona come specificato, ma non riesco a spingere il ramo. La risposta è perché avevo già spinto una volta prima. –

+0

@HsiuDai Non è possibile eseguire nuovamente il push perché non c'è nulla da spingere o perché Git rifiuta di riscrivere la cronologia del ramo? Puoi pubblicare l'URL del tuo repository e il nome del ramo? – janos

+0

Rep. Privato temo, non posso darlo. Ma è perché git si rifiuta di riscrivere la cronologia, poiché dopo il rebase gli SHA sono tutti diversi ora. –

8

Ho usato per avere lo stesso problema:

Se abbiamo foo ramo, ramificata da master, che è già spinto in origin, e su entrambi i rami sono state apportate modifiche, poi, dopo la fusione/modifiche rebasing mi stavo da master in diff. richiesta pull.

ho risolto eseguendo git fetch prima, aggiornando il mio locale master ramo, cambiando ramo locale a foo e quindi l'esecuzione di comandi:

git rebase master

git push -f origin foo:foo

Questo costringe ramo remoto e PR diff contiene solo le modifiche appropriate, esattamente come il ramo verrebbe creato sulla base del recente master.

+0

Ricevo "tutto aggiornato" non cambia nulla – feresr

+0

Hai estratto prima da "origine/master"? Hai usato forza quando spingevi 'pippo' in remoto? –

+0

Penso di aver dimenticato di forzare il push, l'ho risolto cambiando il ramo "base" sul mio PR su qualsiasi ramo diverso dal master e poi cambiandolo indietro – feresr

Problemi correlati