Se stai usando questa forma del branch
comando (con punto di inizio), non importa dove ti HEAD
trovi.
Cosa stai facendo:
git checkout dev
git branch test 07aeec983bfc17c25f0b0a7c1d47da8e35df7af8
Per prima cosa, imposti il tuo HEAD
sul ramo dev
,
In secondo luogo, si avvia un nuovo ramo su commit 07aeec98
. Non c'è bb.txt in questo commit (secondo il tuo repository GitHub).
Se vuoi avviare un nuovo ramo nella posizione che hai appena estratto, puoi eseguire branch senza punto di partenza:
git branch test
o come altri hanno risposto, diramazione e checkout lì in un'unica operazione:
git checkout -b test
Penso che potresti essere confuso dal fatto che 07aeec98
fa parte del ramo dev
. È vero che questo commit è un antenato di dev
, le sue modifiche sono necessarie per raggiungere l'ultimo commit in dev
. Tuttavia, sono altri impegni necessari per raggiungere l'ultimo dev
, e questi non sono necessariamente nella storia di 07aeec98
.
8480e8ae
(dove hai aggiunto bb.txt), ad esempio, non è nella cronologia di 07aeec98
. Se ti dirigi da 07aeec98
, non otterrai le modifiche introdotte da 8480e8ae
.
In altre parole: se unisci il ramo A e il ramo B nel ramo C, quindi crei un nuovo ramo su un commit di A, non otterrai le modifiche introdotte in B.
Lo stesso qui, avevi due rami paralleli master e dev, che hai unito in dev. La ramificazione da un commit di master (precedente all'unione) non fornirà le modifiche di dev.
Se vuoi integrare in modo permanente le nuove modifiche dal master nei rami delle tue funzionalità, dovresti unirli master
e andare avanti. Tuttavia, questo creerà commit di unione nei rami delle funzionalità.
Se non hai pubblicato i tuoi caratteristica rami, si può anche rebase sul master aggiornato: git rebase master featureA
. Preparati a risolvere possibili conflitti.
Se desideri un flusso di lavoro in cui puoi lavorare su rami di funzionalità senza merge commit e integrarti comunque con le modifiche più recenti nel master, ti consiglio quanto segue:
- basare ogni nuovo ramo di funzionalità su un commit di master
- creare un
dev
ramo su un commit di master
- quando hai bisogno di vedere come il tuo ramo di funzionalità si integra con le nuove modifiche in master, unisci sia master che il ramo di funzionalità in
dev
.
Non impegnarti dev
direttamente, usalo solo per unire altri rami.
Ad esempio, se stai lavorando sulle funzioni A e B:
a---b---c---d---e---f---g -master
\ \
\ \-x -featureB
\
\-j---k -featureA
Unisci i rami in un dev
ramo per verificare se funzionano bene con il nuovo master:
a---b---c---d---e---f---g -master
\ \ \
\ \ \--x'---k' -dev
\ \ / /
\ \-x---------- / -featureB
\ /
\-j---k--------------- -featureA
È possibile continuare a lavorare sui rami delle funzionalità e continuare a unire dev
regolarmente le nuove modifiche sia dai rami principali che da quelli delle funzionalità .
a---b---c---d---e---f---g---h---i----- -master
\ \ \ \
\ \ \--x'---k'---i'---l' -dev
\ \ / / /
\ \-x---------- / / -featureB
\ / /
\-j---k-----------------l------ -featureA
Quando è il momento di integrare le nuove funzionalità, unisci i rami delle funzionalità (non dev
!) In master.