2015-08-14 14 views
9

Recentemente ho avuto l'incarico di aggiungere una determinata funzionalità a un progetto su cui sto lavorando. Dato che questa funzione dipende dal vecchio codice che era crudele da usare, ho deciso di dividere il compito in 2 fasi:Ramo di riutilizzo Git o eliminazione e creazione di nuovo

  • refactoring del codice vecchio per essere più utilizzabile
  • creare funzione utilizzando il codice refactoring

Ho creato un ramo feat/foo e, una volta terminato il refactoring, l'ho unito al nostro master in modo da poter utilizzare direttamente le modifiche. Ora sono lasciato con il seguente commit storia:

A ---> B ---> C --> E ---> F <master B: created branch feat/foo 
     |   ^    D: refactoring finished 
     D -----------|     C: changes in master in between 
    ^       E: merge commit 
    feat/foo       F: master is now here 

prodezza/foo punta ancora a D, e il mio padrone avanzata per essere a impegnarsi F. Cosa farei ora di continuare il mio lavoro su questo compito nel ramo impresa/pippo? Vedo due possibilità:

  • o eliminare prodezza/pippo e checkout -b di nuovo, quindi ho un nuovo ramo che ha lo stesso nome come il mio vecchio ramo,
  • o in qualche modo "riutilizzo" impresa/foo, che Non so come fare

La prima soluzione in qualche modo non mi sembra del tutto giusta, sembra "sbagliato" cancellare il ramo solo per crearlo nuovamente. Ma non so come potrei riutilizzarlo.

Cosa devo fare? Eliminare e ricreare il ramo, o se la risposta giusta sarebbe riutilizzarlo, come?

risposta

5

In molti flussi di lavoro, una volta che un ramo di funzionalità è stato fuso in master, viene eliminato. GitHub è probabilmente il primo esempio di questo. Se segui questa scuola di pensiero, dovresti eliminare feat/foo e creare un nuovo ramo di funzionalità per il tuo prossimo sprint.

Se davvero si vuole continuare ad usare il ramo, allora si devono o rebase feat/foo su master o unire master in feat/foo. Non vedo alcun vantaggio per la ridefinizione, che potrebbe essere complicato, quindi consideriamo la fusione. Hai unito feat/foo in master al commit E. Pertanto, master dispone già di tutte le funzionalità da feat/foo, ma il contrario non è vero, ovvero feat/foo è probabile che manchino diverse funzionalità che sono state introdotte in master dal commit D. Per fare l'unione si usa questo comando:

git checkout feat/foo 
git merge master 

Potrebbe essere necessario risolvere i conflitti di fusione derivanti dalle nuove funzionalità di master che non sono ancora nel ramo feat/foo.

Ora il ramo feat/foo è aggiornato con il master e puoi continuare a utilizzarlo se lo desideri. Personalmente, lascerei semplicemente feat/foo dov'è e creerò un ramo di funzionalità completamente nuovo. Puoi tenerlo in giro per alcuni sprint fino a quando non sarai sicuro di eliminarlo.

+0

Grazie, non pensavo davvero di unire il master in feat/foo, ma ora sembra così ovvio. Anche se considero di fare quello che dici e di lasciare solo feat/foo e di iniziare a lavorare su una nuova filiale, questo probabilmente sarebbe più pulito. – Alex

5

Dal momento che è necessario continuare a lavorare sul ramo feat/foo, la prima cosa da fare è quello di cassa è:

git checkout feat/foo 

Perché non è stata completata il lavoro sulla nuova funzionalità di continuare a lavorare e impegnarsi sul ramo fino a quando non hai finito il lavoro e sei pronto per unirlo nuovamente al master.

Di tanto in tanto è opportuno inserire nel ramo le ultime modifiche dal ramo principale. Fate che eseguendo:

git merge master 

mentre si è sul ramo feat/foo.

Non ha molto senso rimuovere il ramo solo per ricrearlo di nuovo. git checkout feat/foo seguito da git merge master produce lo stesso risultato.

Problemi correlati