Crea un ramo in Git da un altro ramo


989

Ho due rami: maestro e dev

Voglio creare un "ramo di caratteristica" dal dev ramo.

Attualmente sul ramo dev, faccio:

$ git checkout -b myfeature dev

... (alcuni lavori)

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

Ma, dopo aver visualizzato i miei rami, ho ottenuto:

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

Voglio dire che il ramo sembra unito e non capisco perché ...

Cosa sto facendo di sbagliato?

Potete spiegarmi per favore come si ramifica da un altro ramo e si spinge di nuovo nel repository remoto per il ramo di funzionalità?

Tutto ciò in un modello di ramificazione come quello descritto qui .

Risposte:


1431

Se ti piace il metodo nel link che hai pubblicato, dai un'occhiata a Git Flow .

È un set di script che ha creato per quel flusso di lavoro.

Ma per rispondere alla tua domanda:

$ git checkout -b myFeature dev

Crea ramo MyFeature da dev. Fai il tuo lavoro e poi

$ git commit -am "Your message"

Ora unisci le tue modifiche allo sviluppo senza avanzare rapidamente

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

Ora invia le modifiche al server

$ git push origin dev
$ git push origin myFeature

E lo vedrai come lo vuoi.


32
qual è l'importanza di spingere myFeaturedopo che è stato unito con arguzia dev?
Alexander Suraphel,

3
@spartacus Se il myFeatureramo è stato inviato al server prima dell'unione, allora niente. Ma se myFeaturenon è stato ancora inviato al server e si desidera che appaia nel server, è necessario inviare l'app.
xOneca,

15
è git checkout -b myFeature devlo stesso di questi 3 comandi:, git checkout devquindi git branch myFeature, e poi git checkout myFeature?
Kevin Meredith,

3
Lo è, o dovrebbe essere. Stai vedendo qualcosa di diverso?
Abizern

33
Per chiarire gli altri neofiti, ecco --no-ffcome appare una fusione
A__

407

Se vuoi creare un nuovo ramo da uno qualsiasi dei rami esistenti in Git, basta seguire le opzioni.

Prima modifica / checkout nel ramo da cui si desidera creare un nuovo ramo. Ad esempio, se hai i seguenti rami come:

  • maestro
  • dev
  • Branch1

Quindi se vuoi creare un nuovo ramo chiamato "subbranch_of_b1" sotto il ramo chiamato "branch1" segui i passaggi:

  1. Acquista o modifica in "branch1"

    git checkout branch1
    
  2. Ora crea il tuo nuovo ramo chiamato "subbranch_of_b1" sotto "branch1" usando il seguente comando.

    git checkout -b subbranch_of_b1 branch1
    

    Quanto sopra creerà un nuovo ramo chiamato subbranch_of_b1 sotto il ramo branch1 (nota che branch1nel comando sopra non è obbligatorio poiché HEAD lo sta puntando al momento, puoi precisarlo se ti trovi su un ramo diverso).

  3. Ora, dopo aver lavorato con subbranch_of_b1, puoi eseguire il commit e il push o unirlo localmente o in remoto.

Un esempio di illustrazione grafica della creazione di rami sotto un altro ramo

spingere subbranch_of_b1 sul telecomando

 git push origin subbranch_of_b1 

7
come spingere subbranch_of_b1 sul telecomando ??
user269867

13
@ user269867: "git push origin subbranch_of_b1" farà questo lavoro per te.
Praveen George,

4
Ora, se invio modifiche al master, avverrà automaticamente in branch1?
Master Yoda,

2
nota che branch1 nel comando sopra non è obbligatorio poiché HEAD lo sta puntando, puoi
precisarlo

10
Sono venuto qui chiedendomi se git checkout -b some-branchè una scorciatoia git checkout -b some-branch master. Si scopre che git checkout -b some-branchè una scorciatoia pergit checkout -b some-branch <current_active_branch>
Frank Henard

45

Crea una filiale

  • Crea ramo quando viene estratto il ramo principale. Qui i commit in master verranno sincronizzati con il ramo creato.

    $ git branch branch1

  • Crea ramo quando ramo1 è estratto. Qui i commit in branch1 verranno sincronizzati con branch2

    $ git branch branch2


Acquista una filiale

git checkout comando si dirama rami o ripristina i file dell'albero di lavoro

  • $ git checkout branchname

Rinominare un ramo

  • $ git branch -m branch1 newbranchname

Elimina un ramo

  • $ git branch -d branch-to-delete
  • $ git branch -D branch-to-delete ( forza l'eliminazione senza controllare lo stato unito )

Crea e cambia ramo

  • $ git checkout -b branchname

Filiali completamente incluse

  • $ git branch --merged


************************** Differenze di diramazione [git diff branch1..branch2] ************** **********

Differenza multilinea
  • $ git diff master..branch1
Differenza Singleline
  • $ git diff --color-words branch1..branch2

1
Inoltre, dopo aver rinominato il ramo, utilizzare git push origin :old-name new-nameper eliminare il ramo remoto di vecchio nome e inviare il ramo locale di nuovo nome.
95faf8e76605e973

13

Esegui lavori simultanei sul devramo. Quello che succede è che nel tuo scenario il ramo della funzionalità si sposta in avanti dalla punta del ramo dev, ma il ramo dev non cambia. È più facile disegnare come una linea retta, perché può essere considerata un movimento in avanti. Sei arrivato al punto A su dev, e da lì hai semplicemente continuato su un percorso parallelo. I due rami non sono realmente divergenti.

Ora, se esegui un commit su dev, prima di unirti, ricomincerai di nuovo con lo stesso commit, A, ma ora le funzionalità andranno a C e dev a B. Questo mostrerà la divisione che stai provando a visualizzare, come i rami ora sono divergenti.

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

Contro

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

9

Git 2.23 introduce git switche git restoredivide le responsabilità digit checkout

Creare un nuovo ramo da un ramo esistente a partire da git 2.23:

git switch -c my-new-branch

Passato a una nuova filiale "my-new-branch"

  • -c è l'abbreviazione di --create e sostituisce il noto checkout git -b

Dai un'occhiata a questo post sul blog di Github che spiega in dettaglio le modifiche:

Git 2.23 porta una nuova coppia di comandi sperimentali nella suite di quelli esistenti: git switch e git restore . Questi due hanno lo scopo di fornire eventualmente un'interfaccia migliore per il noto checkout git. I nuovi comandi intendono ciascuno avere una chiara separazione, dividendo ordinatamente quali sono le molte responsabilità di Git Checkout


9

Per creare un ramo da un altro ramo nella directory locale è possibile utilizzare il comando seguente.

git checkout -b <sub-branch> branch

Per esempio:

  • nome del nuovo ramo da creare 'XYZ'
  • nome della filiale ABC con la quale deve essere creato XYZ
git checkout -b XYZ ABC

3

Se vuoi creare un ramo da un altro ramo, segui i seguenti passaggi:

Ipotesi :

  1. Attualmente sei nel ramo principale.
  2. Non hai modifiche da impegnare. (Se hai delle modifiche da impegnare, nascondilo!).
  3. BranchExistingè il nome del ramo da cui è necessario creare un nuovo ramo con il nome BranchMyNew.

Passaggi :

  1. Recupera il ramo sul tuo computer locale.

    $ git fetch origin BranchExisting : BranchExisting
    

Questo comando creerà un nuovo ramo nel tuo locale con lo stesso nome di ramo.

  1. Ora, dalla verifica del ramo principale al ramo appena recuperato

    $ git checkout BranchExisting
    
  2. Ora sei in BranchExisting. Ora crea un nuovo ramo da questo ramo esistente.

    $ git checkout -b BranchMyNew
    

Ecco qui!


1

Per creare un ramo da un altro si può usare anche questa sintassi:

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

È un po 'più corto di "git checkout -b" + "git push origin"

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.