2015-05-09 19 views
14

Sto lavorando su un ramo di funzionalità.Git: Come schiacciare i commit che hanno un merge-commit in mezzo?

  1. Fatto diversi commit. Impegni schiacciati.
  2. Modifiche apportate al ramo remoto. Ho dei conflitti.
  3. Cambiamenti uniti da conflitti master, risolti sul ramo di funzionalità. (git fetch origine master> git merge FETCH_HEAD> conflitti risolti manualmente> git commit> git push)
  4. Ho fatto un altro commit.

Quindi, la cronologia del commit corrente si presenta così. Dal corrente antiche:

  1. commettere 3
  2. commettere M yyy (fusa)
  3. commettere 2

Come faccio schiaccio superiore a 3 commit in 1 prima che io unisco il mio ramo della funzione di maestro?

risposta

6

Puoi rebase -i a partire con i genitori commit 2 s'(vale a dire, il commit sul master che germogliò da. Probabilmente si dovrà ri-risolvere i conflitti quando si arriva alla fusione commettere.

Quindi, se la vostra storia assomiglia

* D commit 3 (HEAD) 
    * M merge 
/| 
| * C commit 2 
* | B commit on master 
|/ 
* A (master) 

Inizia con git rebase -i A. vedrete un elenco di commit inclusi sia master e your_branch, ma non l'unione commesso. pick il primo (o BC, a seconda dei tempi) e squash il resto.

+0

Ha funzionato. Ma puoi indicarmi la "teoria" per quale motivo ha funzionato? – Miral

+1

Assolutamente, controlla [questo articolo] (https://www.atlassian.com/git/tutorials/merging-vs-rebasing/workflow-walkthrough) e commenta di nuovo se hai delle domande specifiche. –

+0

Guardando ancora (e giocando con un repository di giocattoli), sembra che git rebase -i master' abbia funzionato bene, e non avrebbe incluso il commit di 'master' nel tuo' squash'. E 'quello che stavi provando prima? Cosa stava andando storto? –