Diciamo che ho una funzione (argomento) ramo che tengo rebased in cima al mio ramo di sviluppo. Durante il corso del progetto (prima di unirmi al mio branch di funzionalità), decido che devo apportare un grande refactoring al mio progetto (ad esempio, dopo aver aggiornato un modulo di 3 parti).
Quindi eseguo questo grande refactoring sul mio ramo di sviluppo. Ora voglio rebase il mio branch di funzionalità in modo da poter trarre vantaggio dal mio refactoring.
Il problema
Ci sono ancora cose nel mio ramo delle funzioni che devono essere rifatte per adattarle alle modifiche apportate al mio ramo di sviluppo.
Dovrei:
-
Torna alla cronologia del ramo di funzione cercando di modificare i commit (con
rebase -i
) per far apparire il ramo come se tutto il lavoro fosse stato fatto dopo il refactoring.- Il vantaggio è che mantiene pulita la cronologia.
- Lo svantaggio è che questo può richiedere molto tempo se le modifiche apportate al ramo di sviluppo causano la necessità di apportare molte modifiche nel ramo della funzione.
-
Correggere le cose che devono essere refactored nel mio branch di funzionalità e fare un commit per questo.
- Il vantaggio qui è che sarà molto più facile identificare e correggere le cose che devono essere riparate
- Lo svantaggio è che ora l'albero avrà due in commit per il refactoring. Uno per il refactor fatto per l'intero ramo di sviluppo, e un commit più piccolo fatto per il ramo della funzione, una volta fuso in esso sembrerà un po 'strano.
Quale strategia devo seguire?
Un esempio
Diciamo sul ramo di sviluppo rinominare functionA
in functionB
.
Ora nel mio branch di funzionalità non ho mai modificato il file contenente functionA
(ora functionB
in sviluppo). Quindi, quando esco rebase development
mentre sul mio ramo delle funzionalità, si ribalta in modo pulito.
Il problema è che se ho mai effettuato una chiamata a functionA
nel mio ramo di funzione, ora non funzionerà più poiché è stato rinominato functionB
.
Ora, dovrei fare una ricerca e sostituire per functionA
- > functionB
e crea un commit sul ramo di funzione (opzione 2). O dovrei tornare indietro nella mia cronologia, trovare dove ho introdotto la chiamata a functionA
e riscrivere il commit in modo che venga introdotto come chiamata functionB
(opzione 1)?