versione semplice:Utilizzando git filter-branch per rimuovere impegna per la loro messaggio di commit
Se ho un ramo "foo-555", con un gruppo di commit con messaggi come:
- foo 555: bla
- foo 123: bla bla
- foo 555: bla bla bla
- foo 321: blahblah
e voglio rimuovere tutti i commit che non iniziano con "foo 555:", c'è un modo per farlo usando git filter-branch (o qualsiasi altro strumento per quella materia)?
versione originale (più dettagliata):
Nel nostro repository abbiamo una convenzione in cui ogni messaggio di commit inizia con un certo modello:
Redmine # 555: SOME_MESSAGE
Facciamo anche un po 'di rebasing per introdurre le modifiche del ramo di rilascio potenziale al ramo di un problema specifico. In altre parole, potrei avere un ramo "foo-555", ma prima di fonderlo nel ramo "pre-release" ho bisogno di ottenere qualsiasi commit che pre-release abbia che foo-555 no (così che 555 può eseguire l'avanzamento rapido nella pre-release).
Tuttavia, poiché a volte le pre-release cambiano, a volte ci si ritrova in situazioni in cui si inserisce un commit dalla pre-release, ma successivamente tale commit viene rimosso dalla pre-release. È facile identificare i commit provenienti dalla pre-release, perché il numero dal loro messaggio di commit non corrisponde al numero del ramo; per esempio, se vedo "Redmine # 123: ..." nel mio ramo foo-555, so che non è un commit dal mio ramo.
Quindi ora la domanda: mi piacerebbe rimuovere tutti i commit che "non appartengono" a un ramo; in altre parole, ogni commit che:
- è nel mio ramo foo-555, ma non nel ramo pre-release (pre-release..foo-555)
- ha un messaggio che doesn' commit t iniziare con "Redmine # 555"
ma ovviamente "555" può variare da un ramo all'altro. C'è un modo per usare filter-branch (o qualsiasi altro strumento) per realizzare questo? Attualmente l'unico modo che posso vedere è di fare un rebase interattivo ("git rebase -i") e rimuovere manualmente tutti i commit "cattivi".
si può non ciliegia scegliere i commit desiderati nel ramo in questione? –
Noi * possiamo *, ma diciamo che ho 10 555 commit e 10 altri commit; Dovrei reimpostare e quindi fare 10 scelte di selezione (rispetto a un comando di filtro-ramo ... se è possibile una cosa simile). – machineghost