Si vous utilisez cette forme de branch
commande (avec point de départ), peu importe où vous vous trouvez HEAD
.
Que fais tu:
git checkout dev
git branch test 07aeec983bfc17c25f0b0a7c1d47da8e35df7af8
Tout d'abord, vous définissez votre HEAD
sur la branche dev
,
Deuxièmement, vous démarrez une nouvelle branche lors de la validation 07aeec98
. Il n'y a pas de bb.txt à ce commit (selon votre dépôt github).
Si vous souhaitez démarrer une nouvelle branche à l'emplacement que vous venez d'extraire, vous pouvez exécuter une branche sans point de départ:
git branch test
ou comme d'autres ont répondu, branchez-vous et passez à la caisse en une seule opération:
git checkout -b test
Je pense que vous pourriez être dérouté par ce fait qui 07aeec98
fait partie de la branche dev
. Il est vrai que ce commit est un ancêtre de dev
, ses changements sont nécessaires pour atteindre le dernier commit dans dev
. Cependant, ce sont d'autres engagements qui sont nécessaires pour atteindre le dernier dev
, et ceux-ci ne sont pas nécessairement dans l'histoire de 07aeec98
.
8480e8ae
(où vous avez ajouté bb.txt) n'est par exemple pas dans l'historique de 07aeec98
. Si vous effectuez une branche depuis 07aeec98
, vous n'obtiendrez pas les modifications apportées par 8480e8ae
.
En d'autres termes: si vous fusionnez la branche A et la branche B dans la branche C, puis créez une nouvelle branche sur un commit de A, vous n'obtiendrez pas les changements introduits dans B.
Pareil ici, vous aviez deux branches parallèles master et dev, que vous avez fusionnées en dev. La dérivation d'un commit de master (plus ancien que la fusion) ne vous fournira pas les changements de dev.
Si vous souhaitez intégrer de manière permanente les nouvelles modifications du maître dans vos branches de fonctionnalités, vous devez les fusionner master
et continuer. Cela créera cependant des validations de fusion dans vos branches de fonctionnalités.
Si vous ne publiez pas vos branches de fonction, vous pouvez aussi les rebasage sur le maître mise à jour: git rebase master featureA
. Soyez prêt à résoudre d'éventuels conflits.
Si vous voulez un flux de travail où vous pouvez travailler sur des branches de fonctionnalités sans commits de fusion et toujours intégrer avec les modifications plus récentes dans master, je recommande ce qui suit:
- baser chaque nouvelle branche de fonctionnalité sur un commit de master
- créer une
dev
branche sur un commit de master
- lorsque vous avez besoin de voir comment votre branche d'entités s'intègre aux nouvelles modifications dans le maître, fusionnez à la fois le maître et la branche d'entités dans
dev
.
Ne vous engagez pas dev
directement, utilisez-le uniquement pour fusionner d'autres branches.
Par exemple, si vous travaillez sur les fonctionnalités A et B:
a---b---c---d---e---f---g -master
\ \
\ \-x -featureB
\
\-j---k -featureA
Fusionnez les branches dans une dev
branche pour vérifier si elles fonctionnent bien avec le nouveau maître:
a---b---c---d---e---f---g -master
\ \ \
\ \ \--x'---k' -dev
\ \ / /
\ \-x---------- / -featureB
\ /
\-j---k--------------- -featureA
Vous pouvez continuer à travailler sur vos branches de fonctionnalités et continuer à fusionner dev
régulièrement les nouvelles modifications des branches principales et des branches de fonctionnalités .
a---b---c---d---e---f---g---h---i----- -master
\ \ \ \
\ \ \--x'---k'---i'---l' -dev
\ \ / / /
\ \-x---------- / / -featureB
\ / /
\-j---k-----------------l------ -featureA
Quand il est temps d'intégrer les nouvelles fonctionnalités, fusionnez les branches de fonctionnalités (pas dev
!) Dans master.