Créer une branche dans Git à partir d'une autre branche

991

J'ai deux branches: master et dev

Je veux de la créer une « branche de fonctionnalité » dev branche.

Actuellement sur la branche dev, je fais:

$ git checkout -b myfeature dev

... (certains travaux)

$ git commit -am "blablabla"
$ git push origin myfeature

Mais, après avoir visualisé mes branches, j'ai eu:

--**master**
------0-----0-----0-----0-----0
------------------------**dev**----**myfeature**

Je veux dire que la branche semble ff fusionnée, et je ne comprends pas pourquoi ...

Qu'est-ce que je fais mal?

Pouvez-vous m'expliquer comment vous dérivez d'une autre branche et repoussez vers le référentiel distant pour la branche de fonctionnalité?

Tout cela dans un modèle de branchement comme celui décrit ici .

revohsalf
la source

Réponses:

1432

Si vous aimez la méthode dans le lien que vous avez publié, jetez un œil à Git Flow .

Il s'agit d'un ensemble de scripts qu'il a créés pour ce flux de travail.

Mais pour répondre à votre question:

$ git checkout -b myFeature dev

Crée une branche MyFeature hors dev. Faites votre travail puis

$ git commit -am "Your message"

Fusionnez maintenant vos modifications en dev sans avance rapide

$ git checkout dev
$ git merge --no-ff myFeature

Poussez maintenant les modifications sur le serveur

$ git push origin dev
$ git push origin myFeature

Et vous le verrez comme vous le souhaitez.

Abizern
la source
32
quelle est l'importance de pousser myFeatureaprès qu'il a été fusionné avec l'esprit dev?
Alexander Suraphel
3
@spartacus Si la myFeaturebranche a été poussée sur le serveur avant la fusion, alors rien. Mais s'il myFeaturen'est pas encore poussé vers le serveur et que vous souhaitez qu'il apparaisse sur le serveur, vous devez le pousser à part.
xOneca
15
est git checkout -b myFeature devle même que ces 3 commandes:, git checkout devpuis git branch myFeature, et ensuite git checkout myFeature?
Kevin Meredith
3
C'est ou devrait être. Voyez-vous quelque chose de différent?
Abizern
33
Pour clarifier pour les autres débutants, --no-ff
voici à
408

Si vous souhaitez créer une nouvelle branche à partir de l'une des branches existantes dans Git, suivez simplement les options.

Commencez par changer / passer à la succursale à partir de laquelle vous souhaitez créer une nouvelle succursale. Par exemple, si vous avez les branches suivantes comme:

  • Maître
  • dev
  • branch1

Donc, si vous voulez créer une nouvelle branche appelée "subbranch_of_b1" sous la branche nommée "branch1", suivez les étapes:

  1. Commander ou changer en "branche1"

    git checkout branch1
    
  2. Créez maintenant votre nouvelle branche appelée "subbranch_of_b1" sous la "branche1" en utilisant la commande suivante.

    git checkout -b subbranch_of_b1 branch1
    

    Ce qui précède créera une nouvelle branche appelée subbranch_of_b1 sous la branche branch1 (notez que branch1dans la commande ci-dessus n'est pas obligatoire puisque le HEAD pointe actuellement dessus, vous pouvez le préciser si vous êtes sur une branche différente).

  3. Maintenant, après avoir travaillé avec le subbranch_of_b1, vous pouvez le valider et le pousser ou le fusionner localement ou à distance.

Un exemple d'illustration graphique de la création de branches sous une autre branche

pousser le subbranch_of_b1 à distance

 git push origin subbranch_of_b1 
Praveen George
la source
7
comment pousser le subbranch_of_b1 à distance ??
user269867
13
@ user269867: "git push origin subbranch_of_b1" fera ce travail pour vous.
Praveen George
4
Maintenant, si je pousse les modifications vers le maître, cela se produira-t-il automatiquement dans branch1?
Master Yoda
2
notez que branch1 dans la commande ci-dessus n'est pas obligatoire puisque le HEAD pointe actuellement dessus, vous pouvez le préciser si vous êtes sur une branche différente bien que ce soit ce que je cherchais
felipsmartins
10
Je suis venu ici en me demandant si git checkout -b some-branchc'était un raccourci git checkout -b some-branch master. Il s'avère que git checkout -b some-branchc'est un raccourci pourgit checkout -b some-branch <current_active_branch>
Frank Henard
45

Créer une branche

  • Créer une branche lorsque la branche principale est extraite. Ici, les validations dans master seront synchronisées avec la branche que vous avez créée.

    $ git branch branch1

  • Créer une branche lorsque la branche1 est extraite. Ici, les validations dans branch1 seront synchronisées avec branch2

    $ git branch branch2


Commander une succursale

git checkout command change de branche ou restaure des fichiers d'arborescence de travail

  • $ git checkout branchname

Renommer une succursale

  • $ git branch -m branch1 newbranchname

Supprimer une branche

  • $ git branch -d branch-to-delete
  • $ git branch -D branch-to-delete ( forcer la suppression sans vérifier le statut fusionné )

Créer et changer de branche

  • $ git checkout -b branchname

Branches complètement incluses

  • $ git branch --merged


************************** Différences de branche [git diff branch1..branch2] ************** **********

Différence multiligne
  • $ git diff master..branch1
Différence sur une seule ligne
  • $ git diff --color-words branch1..branch2
Gnanasekar S
la source
1
De même, après avoir renommé la branche, utilisez git push origin :old-name new-namepour supprimer l'ancienne branche distante et appuyez sur la nouvelle branche locale.
95faf8e76605e973
13

Faites un travail simultané sur la devbranche. Ce qui se passe, c'est que dans votre scénario, la branche de fonctionnalité avance de la pointe de la branche de développement, mais la branche de développement ne change pas. Il est plus facile de dessiner en ligne droite, car il peut être considéré comme un mouvement vers l'avant. Vous êtes arrivé au point A sur dev, et à partir de là, vous avez simplement continué sur un chemin parallèle. Les deux branches n'ont pas vraiment divergé.

Maintenant, si vous effectuez un commit sur dev, avant de fusionner, vous recommencerez au même commit, A, mais maintenant les fonctionnalités iront à C et dev à B. Cela montrera la division que vous essayez de visualiser, comme les branches ont maintenant divergé.

*-----*Dev-------*Feature

Contre

       /----*DevB
*-----*DevA
       \----*FeatureC
Krokmou
la source
9

Git 2.23 introduit git switchet git restorepartage les responsabilités desgit checkout

Créer une nouvelle branche à partir d'une branche existante à partir de git 2.23:

git switch -c my-new-branch

Passé à une nouvelle branche «ma-nouvelle-branche»

  • -c est l'abréviation de --create et remplace le fameux git checkout -b

Jetez un œil à ce billet de blog Github expliquant les changements plus en détail:

Git 2.23 apporte une nouvelle paire de commandes expérimentales à la suite des commandes existantes: git switch et git restore . Ces deux sont destinés à terme à fournir une meilleure interface pour le célèbre checkout git. Les nouvelles commandes ont l'intention d'avoir chacune une séparation claire, divisant soigneusement ce que les nombreuses responsabilités de git checkout

JSON C11
la source
9

Pour créer une branche à partir d'une autre branche de votre répertoire local, vous pouvez utiliser la commande suivante.

git checkout -b <sub-branch> branch

Par exemple:

  • nom de la nouvelle branche à créer 'XYZ'
  • nom de la branche ABC sous laquelle XYZ doit être créé
git checkout -b XYZ ABC
Sumit Ghewade
la source
3

Si vous souhaitez créer une branche à partir d'une autre branche, suivez les étapes ci-dessous:

Hypothèses :

  1. Vous êtes actuellement en branche master.
  2. Vous n'avez aucun changement à valider. (Si vous avez des modifications à valider, rangez-les!).
  3. BranchExistingest le nom de la branche à partir de laquelle vous devez créer une nouvelle branche avec un nom BranchMyNew.

Étapes :

  1. Récupérez la branche sur votre ordinateur local.

    $ git fetch origin BranchExisting : BranchExisting
    

Cette commande créera une nouvelle branche dans votre section locale avec le même nom de branche.

  1. Maintenant, de l'extraction de la branche principale à la nouvelle branche récupérée

    $ git checkout BranchExisting
    
  2. Vous êtes maintenant dans BranchExisting. Créez maintenant une nouvelle branche à partir de cette branche existante.

    $ git checkout -b BranchMyNew
    

Voici!

Darshit
la source
1

Pour créer une branche à partir d'une autre, vous pouvez également utiliser cette syntaxe:

git push origin refs/heads/<sourceBranch>:refs/heads/<targetBranch>

Il est un peu plus court que "git checkout -b" + "git push origin"

Alexander Samoylov
la source