Ho due rami: master e dev
Voglio creare un "feature branch" dal ramo dev.
Attualmente sul ramo dev, faccio:
$ git checkout -b myfeature dev
... (un po' di lavoro)
$ git commit -am "blablabla"
$ git push origin myfeature
Ma, dopo aver visualizzato i miei rami, ho ottenuto:
--**master**
------0-----0-----0-----0-----0
------------------------**dev**----**myfeature**
Voglio dire che il ramo sembra ff fuso, e non capisco perché...
Cosa sto sbagliando?
Puoi spiegarmi per favore come si fa a fare la diramazione da un altro ramo e spingere di nuovo al repository remoto per il ramo delle funzionalità?
Tutto questo in un modello di branching come quello descritto qui.
Se ti piace il metodo nel link che hai postato, dai un'occhiata a Git Flow.
È un insieme di script che ha creato per quel flusso di lavoro.
Ma per rispondere alla tua domanda:
$ git checkout -b myFeature dev
Crea il ramo MyFeature da dev. Fai il tuo lavoro e poi
$ git commit -am "Your message"
Ora unisci le tue modifiche a dev senza un avanzamento veloce
$ git checkout dev
$ git merge --no-ff myFeature
Ora spingi le modifiche al server
$ git push origin dev
$ git push origin myFeature
E lo vedrai come vuoi tu.
Se volete creare un nuovo ramo da uno qualsiasi dei rami esistenti in Git, basta seguire le opzioni.
Prima cambia/controlla nel ramo da cui vuoi creare un nuovo ramo. Per esempio, se hai i seguenti rami come:
Quindi se volete creare un nuovo ramo chiamato "subbranch_di_b1" sotto il ramo chiamato "branch1" seguite i passi:
Fate il checkout o cambiate in "branch1"
git checkout branch1
Ora create il vostro nuovo ramo chiamato "subbranch_di_b1" sotto il "branch1" usando il seguente comando.
git checkout -b subbranch_of_b1 branch1
Quanto sopra creerà un nuovo ramo chiamato subbranch_of_b1 sotto il ramo branch1 (si noti che branch1
nel comando di cui sopra non è obbligatorio poiché l'HEAD punta attualmente ad esso, è possibile precisarlo se si è su un ramo diverso).
Ora dopo aver lavorato con il subbranch_di_b1 puoi fare il commit e il push o il merge in locale o in remoto.
spingi la sottobranca_di_b1 in remoto
git push origin subbranch_of_b1
Fai un lavoro simultaneo sul ramo dev
. Quello che succede è che nel tuo scenario il ramo delle funzionalità si muove in avanti dalla punta del ramo dev, ma il ramo dev non cambia. È più facile da disegnare come una linea retta, perché può essere pensato come un movimento in avanti. Sei arrivato al punto A su dev, e da lì hai semplicemente continuato su un percorso parallelo. I due rami non si sono realmente divisi.
Ora, se fate un commit su dev, prima di fondere, comincerete di nuovo dallo stesso commit, A, ma ora le caratteristiche andranno a C e dev a B. Questo mostrerà la divisione che state cercando di visualizzare, poiché i rami hanno ora divergenza.
*-----*Dev-------*Feature
Contro
/----*DevB
*-----*DevA
\----*FeatureC