2013-03-05 15 views
16

Ho controllato un paio di commit a master che avrebbe dovuto essere controllato in develop. Quali comandi git ho usato per rimuovere quei commit dal ramo master e includere nel ramo di sviluppo?Come spostare la git commessa dal master a un altro ramo esistente

+1

Hai guardato questa risposta? - http://stackoverflow.com/questions/1773731/in-git-how-do-i-remove-a-commit-from-one-branch-and-apply-it-to-a-different-bra?rq = 1 –

+0

sguardo a questo: [move-recente-commit-a-un-nuovo-ramo] [1] [1]: http://stackoverflow.com/questions/1628563/move-recent -commit-to-a-a-new-branch –

+0

dato che c'è una "questa domanda potrebbe già avere una risposta qui" blocco in alto, voglio solo sottolineare che la mia domanda non riguarda il passaggio a un ramo _new_, si tratta di passare a un diverso ramo_esistente_ – gitq

risposta

5

È possibile cherry-pick tuoi commit verso il develop e poi in modo interattivo rebase tua master filiale:

  1. git checkout develop
  2. git cherry-pick aabbcc
  3. git cherry-pick ddeeff
  4. ....
  5. git checkout master
  6. git rebase 123456 -i

dove 123456 è un commit prima di aver fatto un errore. Questo aprirà un editor che mostra ogni commit che sarà interessato dal rebase. Elimina le righe corrispondenti ai commit che vuoi scartare e uscire dall'editor.

6

per far fronte in un altro ramo è possibile utilizzare cherry picking:

git cherry-pick <commit> 

eliminazione non è così facile. È possibile utilizzare rebase e squash o modificare il commit:

git rebase -i <commit>~1 

ma non sono sicuro di quando scegliendo di modifica durante rebase se è possibile modificare i file anche piuttosto che il messaggio di commit solo.

+1

'edit' durante un rebase interattivo consente di modificare messaggi di commit e file,' reword' consente solo di modificare il messaggio di commit. –

0

Di solito ci sono diversi modi per fare la stessa cosa in git un modo possibile:

git checkout develop 
git cherry-pick XXX // XXX being the sha1 of the commit you want to grab 
git checkout master 
git rebase --interactive HEAD~IDX // IDX being the position of the last "good" commit compared to HEAD 

L'ultimo comando visualizzerà tutti recensione da capo a l'ultima buona commit e tutto quello che dovete fare è soppressa la linea della impegnarsi a mosso a ramificarsi sviluppare

25

Se non sbaglio, hai avuto due rami sincronizzati, master e dev, e semplicemente dimenticato di accendere il ramo, davanti ai vostri commit.

Se questo è il caso, si ha:

---------------- 
git log in dev 

xxx 
yyy 
... 
---------------- 

e:

---------------- 
git log in master 

ccc 
bbb 
aaa 
     <---- here you forgot to switch branch 
xxx 
yyy 
... 
---------------- 

La soluzione è:

In primo luogo, assicurarsi che:

git status -s 

restituisce risultati vuoti.

Avanti, ottenere tutti i nuovi commit da master-dev con:

git checkout dev 
git merge master 

Ora tornare a voi master:

git checkout master 

Rimuovere commit inutili:

git reset --hard HEAD~3 

Il numero ~3 è il numero di te che ti impegni voglio rimuovere.

Ricordare: git status -s restituire risultati vuoti. Altrimenti, git reset --hard può causare la perdita di dati.

Problemi correlati