2016-07-19 152 views
5

I have 2 branches, master & feature. Il Maestro occasionalmente riceve piccole modifiche necessarie per andare rapidamente a vivere. Una volta apportate queste modifiche, master viene ridefinito in feature in modo che la funzionalità sia aggiornata.Rimuovere i commit duplicati introdotti dopo una cattiva rebase

I file modificati su master in genere non sono correlati alla maggior parte dello sviluppo su feature ma ho riscontrato un numero elevato di complicati conflitti di unione in 3 modi.

Dopo aver esaminato il registro di commit di feature, ho riscontrato che il problema è costituito da diversi duplicati e sto tentando di risolverlo con un rebase interattivo.

La mia domanda è:

È questo la migliore soluzione per il problema, e se così posso solo rilasciare i duplicati ed essenzialmente costruire la storia di come mi aspetto che guardare? Anche quali duplicati dovrei cadere, più in alto (originale più vecchio) o più basso (duplicati più recenti).

astratta lista tratto da git rebase master -i:

pick 0eb277c Commit A 
pick ced2556 Commit B 
pick 640e049 Commit C 
pick b248ff7 Commit D 
pick 9903094 Commit E 
pick ebc279d Commit A 
pick 313385b Commit F 
pick 0d55178 Commit G 
pick c8f09f9 Commit H 
pick e877be3 Commit I 
pick 9859aa0 Commit J 
pick c3c8e0f Commit K 
pick 8abc68c Commit L 
pick 84a5c89 Commit A 
pick 30570e4 Commit B 
pick 937ff2f Commit C 
pick 8e6d911 Commit D 
pick 1dd3a09 Commit E 
pick fe79288 Commit F 
pick 9e790bb Commit G 
pick 0924916 Commit H 
pick 90d59d7 Commit I 
pick ba06c55 Commit J 
pick 7452fad Commit K ** Dupes end here** and features then has 30+ more commits. 
pick d1dca3d Commit M 
pick 6c85f76 Commit N 
pick ad53b78 Commit O 
pick f166471 Commit P 
+1

Puoi usare 'git rebase -i HEAD ~ x' sostituisci' x' con qualsiasi numero di commit che vuoi guardare dall'alto in basso e.g 'git rebase -i HEAD ~ 3' questo ti darà tre ultimi commit. È quindi possibile selezionare quali commit si desidera conservare e quali si desidera eliminare. –

+0

I commit 0eb277c e ebc279d sono contrassegnati come commit A, ma ovviamente i loro sha1 sono diversi, quindi quelli sono commit diversi. In realtà non vedo alcun commit duplicato nell'elenco sha1. – Frodon

+0

Intendo il duplicato liberamente, i messaggi di commit sono gli stessi e il codice che viene applicato è lo stesso. Ma è duplicato e salvato come un nuovo commit. – Kiee

risposta

4

Per rimuovere il duplicato impegna è necessario passare attraverso la lista generata da git rebase master -i e rilasciare i duplicati navigando su e giù l'elenco utilizzando i tasti freccia premendo d sui commit che si desidera drop.

(master può essere sostituito con un hash commmit o qualsiasi punto di ri-base valido)

Una volta che sono stati eliminati tutti i duplicati e avere un elenco che sembra come ci si aspetta la storia di guardare commettere, uscita la schermata di rebase premendo esc e digitando !wq e premendo immettere.

La ri-base continuerà e applicherà l'elenco di commit pick sul punto di ricollocazione.