Se si utilizza questo modulo del comando branch
(con punto iniziale), non importa dove sia lo HEAD
.
Quello che state facendo:
git checkout dev
git branch test 07aeec983bfc17c25f0b0a7c1d47da8e35df7af8
In primo luogo, è possibile impostare il vostro HEAD
al ramo dev
,
In secondo luogo, si avvia una nuova filiale a commettere 07aeec98
. Non c'è bb.txt a questo commit (secondo il repository Github).
Se si desidera avviare un nuovo ramo alla località che hai appena controllato, è possibile ramo correre senza punto di partenza:
git branch test
o come altri hanno risposto, ramo e checkout lì in una sola operazione:
git checkout -b test
penso che si potrebbe essere co nfused da quel fatto che 07aeec98
è 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 commit necessari per raggiungere l'ultimo dev
e questi non sono necessariamente nella cronologia di 07aeec98
.
8480e8ae
(dove è stato aggiunto bb.txt) non è ad esempio nella cronologia di 07aeec98
. Se si dirama da 07aeec98
, non si otterranno le modifiche introdotte da 8480e8ae
.
In altre parole: se si uniscono ramo A e B ramo in ramo C, quindi creare un nuovo ramo su un commit di A, non sarà possibile ottenere le modifiche introdotte in B.
Stesso qui, è ha avuto due rami paralleli master e dev, che sono stati uniti in dev. Branching out da un commit di master (più vecchio dell'unione) non ti fornirà le modifiche di dev.
Se si vuole permanentemente integrare nuovi cambiamenti da padrone nella vostra caratteristica rami, si dovrebbe unire master
in loro e andare avanti. Ciò creerà commit di unione nei rami delle funzionalità, però.
Se non sono stati pubblicati i rami delle funzioni, è possibile rebase anche sul master aggiornato: git rebase master featureA
. Preparati a risolvere possibili conflitti.
Se si desidera un flusso di lavoro in cui è possibile lavorare su questi rami liberi di merge commit ed ancora integrare con i cambiamenti più recenti in Master, vi consiglio il seguente:
- base di ogni nuovo ramo di caratteristica su un commit del maestro
- creare un ramo
dev
su un impegno di maestro
- quando hai bisogno di vedere come il vostro ramo di caratteristica si integra con nuovi cambiamenti nella padrone, unire sia padrone e al ramo della funzione in
dev
.
Non eseguire il commit direttamente in dev
, utilizzarlo solo per unire altri rami.
Per esempio, se si sta lavorando su funzionalità di A e B:
a---b---c---d---e---f---g -master
\ \
\ \-x -featureB
\
\-j---k -featureA
rami si fondono in un ramo dev
per verificare se funzionano bene con il nuovo padrone:
a---b---c---d---e---f---g -master
\ \ \
\ \ \--x'---k' -dev
\ \ //
\ \-x---------- / -featureB
\ /
\-j---k--------------- -featureA
Puoi continuare a lavorare sui rami delle funzionalità e continuare a unire le nuove modifiche da entrambe le diramazioni principale e delle funzioni in dev
regolarmente.
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à, unire le funzionalità rami (non dev
!) Nella master.
grazie. Tu rispondi alla mia domanda. Ho torto a capire la modalità branch git. E hai qualche suggerimento per il mio problema. Ho il master branch che ha molti commit tempestivi dagli altri (sincronizzazione con perforce). Ho un ramo dev faccio un lavoro personale. Voglio un ramo che contenga tutti i commit dal ramo master e dal ramo dev, quindi posso facilmente creare un branch basato su questo ramo, quindi avviare un lavoro specifico. – RolandXu
Non ho potuto rispondere in un commento, quindi aggiorno la mia risposta con i flussi di lavoro suggeriti. – Gauthier
Grazie mille. – RolandXu