2010-12-30 5 views
10

Ho un repository dove stavo lavorando al ramo master con l'ultima aggiunta di circa 10 commit che ora vorrei fossero su un altro ramo, in quanto descrivono il lavoro che ora vedo essere sperimentale (sto ancora imparando buone pratiche git) . Fondamentalmente vorrei che questi ultimi 10 commit inizino da un punto in master per formare un proprio branch, in modo da poter avere master solo per il tipo "release"/"stable".git: Come spostare l'ultimo N commit fatto per diventare master, nel proprio ramo?

Quello che ho ora, più a destra X è l'ultimo commit effettivamente un bene per il rilascio:

 b--b (feature B) 
    /  
X--X--X--Z--Z--Z--Z--Z--Z (master) 
    \ 
    a--a--a (feature A) 

si può vedere che sia X e Z sono il padrone, mentre quello che voglio è commit segnata da Z (il mio "funzione Z" lavoro) a mentire sul proprio ramo caratteristica, quindi suggerimento di master is at the rightmost X`. Per illustrare il grafico desiderato:

 b--b (feature B) 
    /  
X--X--X (master) 
    \ \ 
    \ Z--Z--Z--Z--Z--Z (feature Z - the new branch I want) 
     \ 
     a--a--a (feature A) 

In questo modo avrò la mia master riservati ai roba di qualità, che si fondono in A, B e Z le caratteristiche in base alle esigenze.

Quindi, come si sposta la "Z" sul proprio ramo?

+0

possibile duplicato del [Sposta impegna da maestro su un ramo utilizzando git] (http: // StackOverflow .com/domande/37 19068/move-commits-from-master-on-a-branch-using-git) –

risposta

12
git checkout master 
git branch feature-Z 
git reset <commit_id> 

dove commit_id è un identificatore di quell'ultimo X commit prima di rami B Spento.

+7

Probabilmente vorrai 'git reset --hard'. E se ci sono modifiche che non sono state verificate, lanciare un 'git stash' prima di esso e un' git stash pop' dopo di esso. –

+0

Concordato, fondamentalmente. Dal momento che non ha detto/richiesto nulla sull'avvio/desiderio dello stato dell'albero di lavoro, ho inserito la soluzione di digitazione minima che ha fatto ciò che ha chiesto. Sembra che conosca abbastanza git per inventare i dettagli da solo. Ho upvoted il tuo commento per tenerlo visibile per gli altri che non volevano. –

2

Semplicemente Rename Master e iniziare un nuovo padrone all'ultimo X:

git checkout master; git branch -m feature; git checkout -b master HEAD~6

+0

uno svantaggio della tua proposta è che ora la funzione sta monitorando origine/master. –

5

Per completezza, la risposta è qui - http://git-scm.com/docs/git-reset - cercare il testo "Annulla un commit, che lo rende un ramo argomento "- l'esempio mostra effettua l'ultimo 3 commette un ramo e il ripristino master al commit precedente a quei 3 commit:

$ git status 
# On branch master 
# Your branch is ahead of 'origin/master' by 3 commits. 
# 
nothing to commit (working directory clean) 
$ git branch topic/wip 
$ git reset --hard HEAD~3 
$ git checkout topic/wip 
Switched to branch topic/wip 
+0

Il collegamento kernel.org è diventato 404, ma 'man git-rebase' fornirà l'ultima versione della tua versione di git. –