Maak een branch in Git vanuit een andere branch

Ik heb twee branches: masteren dev

Ik wil een “feature branch” maken van de devbranch.

Momenteel op de branch dev, doe ik:

$ git checkout -b myFeature dev

… (wat werk)

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

Maar nadat ik mijn takken had gevisualiseerd, kreeg ik:

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

Ik bedoel dat de branch ff samengevoegd lijkt, en ik begrijp niet waarom…

Wat doe ik verkeerd?

Kun je me alsjeblieft uitleggen hoe je aftakt van een andere tak en terug duwt naar de externe repository voor de functietak?

Dat alles in een vertakkingsmodel zoals het hier beschreven model.


Antwoord 1, autoriteit 100%

Als je de methode in de link die je hebt gepost leuk vindt, kijk dan eens naar Git Flow.

Het is een set scripts die hij voor die workflow heeft gemaakt.

Maar om je vraag te beantwoorden:

$ git checkout -b myFeature dev

Maakt MyFeature branch off dev. Doe je werk en dan

$ git commit -am "Your message"

Voeg uw wijzigingen nu samen met dev zonder vooruitspoelen

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

Push wijzigingen nu naar de server

$ git push origin dev
$ git push origin myFeature

En u zult het zien zoals u het wilt.


Antwoord 2, autoriteit 30%

Als je een nieuwe branch wilt maken van een van de bestaande branches in Git, volg dan gewoon de opties.

Eerst wijzigen/afrekenen in het filiaal van waaruit u een nieuw filiaal wilt maken. Als u bijvoorbeeld de volgende branches heeft, zoals:

  • meester
  • ontwikkelaar
  • tak1

Dus als je een nieuwe branch wilt maken met de naam “subbranch_of_b1”onder de branch genaamd “branch1”volg de stappen:

  1. Afrekenen of wijzigen in “branch1”

    git checkout branch1
    
  2. Maak nu je nieuwe branch genaamd “subbranch_of_b1”onder de “branch1”met het volgende commando.

    git checkout -b subbranch_of_b1 branch1
    

    Het bovenstaande creëert een nieuwe branch genaamd subbranch_of_b1onder de branch branch1(merk op dat branch1in het bovenstaande commando niet verplicht is omdat de HEAD wijst er momenteel naar, je kunt het echter nauwkeurig aangeven als je op een andere branch zit).

  3. Na het werken met de subbranch_of_b1kun je het lokaal of op afstand vastleggen en pushen of samenvoegen.

duw subbranch_of_b1 naar afstandsbediening

git push origin subbranch_of_b1 

Antwoord 3, autoriteit 4%

Maak een filiaal

  • Maak een vertakking wanneer de hoofdvertakking is uitgecheckt. Hier worden commits in master gesynchroniseerd met de branch die je hebt gemaakt.

    $ git branch branch1

  • Maak branch wanneer branch1 is uitgecheckt . Hier worden commits in branch1 gesynchroniseerd met branch2

    $ git branch branch2


Afrekenen Een filiaal

Git Checkout-opdrachtschakelaar takken of herstel werkboombestanden

  • $ git checkout branchname

Renaming van een filiaal

  • $ git branch -m branch1 newbranchname

Verwijder een filiaal

  • $ git branch -d branch-to-delete
  • $ git branch -d branch-to-delete
    (Force-deletie zonder de samengevoegde status )
  • te controleren


Creëer en schakel filiaal

  • $ git checkout -b branchname

takken die volledig zijn opgenomen

  • $ git branch --merged


************************** tak verschillen [git diff tak1..branch2] **** ********************

Multiline-verschil

  • $ git diff master..branch1

Singleline verschil

  • $ git diff --color-words branch1..branch2

Antwoord 4

Om een ​​filiaal uit een andere branche in uw lokale map te maken, kunt u de volgende opdracht gebruiken.

git checkout -b <sub-branch> branch

Bijvoorbeeld:

  • Naam van de nieuwe tak die ‘xyz’ wordt gemaakt
  • Naam van de tak ABC waaronder XYZ moet worden gemaakt
git checkout -b XYZ ABC

Antwoord 5

GIT 2.23 introduceert git switchen git restoreom de verantwoordelijkheden van git checkout

Een nieuw filiaal maken van een bestaande branche vanaf GIT 2.23:

git switch -c my-new-branch

Overgeschakeld naar een nieuwe filiaal ‘My-New-Branch’

  • -C is kort voor – maak en vervangt de bekende GIT Checkout -B

Bekijk dit Github-blogpost De wijzigingen in meer detail uitleggen:

git 2.23 brengt een nieuw paar experimentele opdrachten naar de reeks bestaande
Dingen: Git Switch en Git Restore . Deze twee zijn uiteindelijk bedoeld
Geef een betere interface voor de bekende git-afrekenen. De nieuwe
Commando’s zijn van plan om elk een duidelijke scheiding te hebben, netjes didend op
Wat de vele verantwoordelijkheden van Git Checkout


Antwoord 6

Gelijktijdig werken op de devfiliaal. Wat er gebeurt, is dat in uw scenario de feature-filiaal naar voren komt van de punt van de dev-filiaal, maar de dev-filiaal verandert niet. Het is gemakkelijker om als een rechte lijn te tekenen, omdat het als voorwaartse beweging kan worden beschouwd. Je hebt het een op dev gedaan en van daaruit ging je gewoon op een parallelle pad. De twee takken zijn niet echt uiteengegaan.

Nu, als u een commit op dev maakt, vóór het samenvoegen, zult u opnieuw beginnen bij dezelfde commit, a, maar nu zullen functies naar C en Dev tot B. Dit zal de splitsing laten zien die u probeert te visualiseren, Naarmate de takken nu hebben uiteengegaan.

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

versus

      /----*DevB
*-----*DevA
       \----*FeatureC

Antwoord 7

Als u een filiaal van een ander filiaal wilt maken, volgt u de hieronderstaande stappen:

Assumptions :

  1. Je bent momenteel in de master branch.
  2. Je hebt geen wijzigingen om vast te leggen. (Als je wijzigingen wilt vastleggen, bewaar ze dan!).
  3. BranchExistingis de naam van de branch waarvan je een nieuwe branch moet maken met de naam BranchMyNew.

Stappen:

  1. Haal de vertakking op naar uw lokale computer.

    $ git fetch origin BranchExisting : BranchExisting
    

Dit commando maakt een nieuwe branch in je local met dezelfde branchnaam.

  1. Nu, van het afrekenen van de master branch naar de nieuw opgehaalde branch

    $ git checkout BranchExisting
    
  2. Je bent nu in BranchExisting. Maak nu een nieuwe vertakking van deze bestaande vertakking.

    $ git checkout -b BranchMyNew
    

Hier ga je!


Antwoord 8

Verschillende manieren om een branch in git te maken vanuit een andere branch:

Dit antwoord voegt wat extra inzicht toe, dat nog niet aanwezig is in de bestaande antwoorden, met betrekking tot alleen de titelvan de vraag zelf (Maak een vertakking in Git vanuit een andere vertakking) , maar gaat nietin op de meer enge details van de vraag die hier al voldoende antwoorden hebben.

Ik voeg dit toe omdat ik echt moest weten hoe ik #1 hieronder moest doen (maak een nieuwe branch van een branch die ik NIET heb uitgecheckt), en het was niet duidelijk hoe ik dat moest doen, en Google-zoekopdrachten leidden hier als topzoekresultaat. Daarom deel ik hier mijn bevindingen. Dit wordt niet goed of helemaal niet aangekaart door enig ander antwoord hier.

Terwijl ik toch bezig ben, zal ik hieronder ook mijn andere meest voorkomende git branch-commando’s toevoegen die ik in mijn normale workflow gebruik.

1. Om een nieuwe branch aan te maken van een branch die je NIET hebt uitgecheckt:

Maak branch2van branch1terwijl je welke branch dan ook hebt uitgecheckt (bijvoorbeeld: laten we zeggen dat je masterhebt uitgecheckt):

git branch branch2 branch1

Het algemene formaat is:

git branch <new_branch> [from_branch]

man git branchlaat het als volgt zien. Wat ik <new_branch>noem, noemen ze <branchname>, en wat ik [from_branch]noem is wat ze [<start-point>]:

git branch [--track | --no-track] [-l] [-f] <branchname> [<start-point>]

2. Om een nieuwe branch aan te maken van de branch die je WEL hebt uitgecheckt:

git branch new_branch

Dit is geweldig voor het maken van back-ups voordat u gaat rebasen, squashen, hard resetten, enz. – voordat u iets doet dat uw branch ernstig zou kunnen verknoeien.

Bijvoorbeeld: ik ben op feature_branch1, en ik sta op het punt 20 commits in 1 te pletten met behulp van git rebase -i master. Voor het geval ik dit ooit ongedaan wil maken, laten we eerst een back-up maken van deze branch! Ik doe dit ALL…THE…TIMEen vind het super handig en geruststellend om te weten dat ik altijd gemakkelijkterug kan gaan naar deze back-up branch en opnieuw vertakt kan worden om het opnieuw te proberen voor het geval ik feature_branch1tijdens het proces verknoeid:

git branch feature_branch1_BAK_20200814-1320hrs_about_to_squash

Het 20200814-1320hrsgedeelte is de datum en tijd in het formaat YYYYMMDD-HHMMhrs, dus dat zou 13:20 uur (1:20 uur) zijn op 14 aug. 2020 Op deze manier heb ik een gemakkelijke manier om mijn back-uptakken te vinden totdat ik zeker weet dat ik klaar ben om ze te verwijderen. Als je dit niet doet en het verprutst, moet je git refloggebruiken om je branch te vinden voordat je het verknoeit, wat veel moeilijker, stressvoller en foutgevoeliger is .

3. Om en uit te checkeneen nieuw filiaal van het filiaal dat u WEL hebt uitgecheckt:

git checkout -b new_branch

Om duidelijk te maken wat daar gebeurt, moet u weten dat dit ene commando hierboven gelijk is aan deze twee afzonderlijke commando’s:

git branch new_branch
git checkout new_branch

4. Een filiaal hernoemen

Net zoals het hernoemen van een normaal bestand of map in de terminal, beschouwde git“hernoemen” meer als een ‘m’ove-commando, dus gebruik je git branch -mom een tak te hernoemen. Hier is het algemene formaat:

git branch -m <old_name> <new_name>

man git branchlaat het als volgt zien:

git branch (-m | -M) [<oldbranch>] <newbranch>

Voorbeeld: laten we branch_1hernoemen naar branch_1.5:

git branch -m branch_1 branch_1.5

Antwoord 9

Voor het maken van een branch van een andere kan men ook deze syntax gebruiken:

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

Het is iets korter dan “git checkout -b” + “git push origin”


Antwoord 10

Schakel over naar de ontwikkeltak:

$ git checkout develop

Creëert feature/foo branch van development.

$ git checkout -b feature/foo develop

Voeg de wijzigingen samen om te ontwikkelen zonder een snelle

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

Duw nu wijzigingen in de server

$ git push origin develop
$ git push origin feature/foo

Other episodes