2013-06-26 12 views
5

Supponiamo che io sono localmente sul ramo master del nostro repository benedetto. Qualcuno ha inviato una richiesta di pull.rebase una richiesta di pull GitHub sopra delle mie più recenti commit locali

Come si applicano i commit di quella richiesta di pull in cima alla mia sezione locale - come se quelle commit sono stati rapportati mio ramo - in un unico comando?

Nota: la richiesta di pull è diversi giorni, e la mia filiale locale ha nuovi commit dal momento che la richiesta di pull è stato creato.

+0

Ho anche chiesto un [domanda simile qui] (http://stackoverflow.com/questions/17182624/contribuendo-to-project-on-github-how-to-rebase-my-pull-richiesta-on-top-of-albero), che può aiutare qualcuno con lo stesso problema – fontno

risposta

6

C'è un great blog post in materia, da Igor Zevaka

Prima devi prendere il nascosto richiesta di pull ref, e metterlo sotto il ramo pr/NNN remota:

git fetch origin refs/pull/1234/head:refs/remotes/pr/1234 

(sostituire 1234 dalla trazione richiesta Codice)

Dopo questo è solo un rebase classica: checkout la richiesta di pull, e rebase sul vostro master ramo:

git checkout pr/1234 
git rebase master 

o in alternativa

git rebase master pr/1234 

Si potrebbe naturalmente vedere i conflitti.

Ora la richiesta di pull è rapportati master, ed è il ramo corrente. Se si desidera aggiornare padrone solo fondere la richiesta di pull (diciamo --ff-only perché sappiamo che sarà una fusione fast-forward):

git checkout master 
git merge --ff-only pr/1234 

Per avere una battuta viene richiesto un po 'di aliasing guscio, è solo una questione di scripting :)

+0

1. quando 'pr_1234' è stato estratto , facendo 'git rebase master' sarà rebase' pr_1234' su 'master' (vedi http://git-scm.com/docs/git-rebase) – CharlesB

+0

2.perché non sono sicuro che un ramo remoto con barre possa essere estratto così com'è, e il post originale del blog lo fa in questo modo. – CharlesB

+0

Sono stato lontano da git per troppo tempo! ovviamente dopo rebase 'master' è ancora un antenato della richiesta pull ... Preferisco il comando merge, più intuitivo anche se il risultato è lo stesso (anche io ho upvoted una delle tue risposte) – CharlesB

1

OK, questo one-liner si rebase tuoi commit in cima alla richiesta di pull (che è l'inverso di ciò che si vuole; vedere la mia altra risposta):

git pull --rebase origin pull/NNN/head 

Dove NNN è il numero di richiesta di pull. Ciò presuppone che origin è il tuo telecomando Github sul repository locale e che master è stato estratto.

Explanation here sul blog di Douglas Stuarts: Github archivia richieste da altre forcelle nel repository origin, sotto pull/NNN. Questo è ciò che consente di eseguire pull --rebase su di esso.

+1

hah (/ me cancella risposta) - Non ero in una macchina ieri per verificare che funzioni. Questo metterà il "ramo locale ha nuovi commit" in cima al pr commit - non è chiaro dalla domanda se va bene o no. +1. – AD7six

+1

Sì, non penso che sia ciò che l'OP cercava, ma è una risposta intelligente. – jszakmeister

+0

In effetti l'inverso di quello che voglio, ma interessante nota a margine comunque :) –

0

Installare hub

# directly apply all commits from a pull request to the current branch 
$ git am -3 https://github.com/github/hub/pull/134 

TODO: necessità di capire come per forzare un --rebase

Problemi correlati