Utwórz gałąź w Git z innej gałęzi


989

Mam dwie gałęzie: master i dev

Chcę utworzyć „gałąź funkcji” z gałęzi deweloperów .

Obecnie w oddziale dewelopera wykonuję:

$ git checkout -b myfeature dev

... (trochę pracy)

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

Ale po wizualizacji moich oddziałów otrzymałem:

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

Mam na myśli, że gałąź wydaje się połączona i nie rozumiem, dlaczego ...

Co robię źle?

Czy możesz mi wyjaśnić, w jaki sposób oddziałujesz z innej gałęzi i wypychasz z powrotem do zdalnego repozytorium dla gałęzi funkcji?

Wszystko to w rozgałęzionym modelu, takim jak opisany tutaj .

Odpowiedzi:


1431

Jeśli podoba Ci się metoda w opublikowanym linku, spójrz na Git Flow .

Jest to zestaw skryptów, które stworzył dla tego przepływu pracy.

Ale aby odpowiedzieć na twoje pytanie:

$ git checkout -b myFeature dev

Tworzy gałąź MyFeature poza dev. Wykonaj swoją pracę i wtedy

$ git commit -am "Your message"

Teraz scal swoje zmiany w dev bez szybkiego przewijania do przodu

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

Teraz wypchnij zmiany na serwer

$ git push origin dev
$ git push origin myFeature

I zobaczysz to tak, jak chcesz.


32
jakie znaczenie ma pchanie myFeaturepo połączeniu z dowcipem dev?
Alexander Suraphel

3
@spartacus Jeśli myFeaturegałąź została zepchnięta na serwer przed połączeniem, to nic. Ale jeśli myFeaturenie jest jeszcze wypychany na serwer i chcesz, aby pojawił się na serwerze, musisz go wypchnąć.
xOneca

13
jest git checkout -b myFeature devtaki sam jak te 3 polecenia: git checkout devwtedy git branch myFeature, a potem git checkout myFeature?
Kevin Meredith

3
Tak jest, albo powinno być. Czy widzisz coś innego?
Abizern,

33
Aby wyjaśnić innym początkującym, tak --no-ffwygląda scalenie
A__

407

Jeśli chcesz utworzyć nowy oddział z dowolnego z istniejących oddziałów w Git, po prostu postępuj zgodnie z opcjami.

Najpierw zmień / wpłać do oddziału, z którego chcesz utworzyć nowy oddział. Na przykład, jeśli masz następujące gałęzie, takie jak:

  • mistrz
  • dev
  • oddział 1

Więc jeśli chcesz utworzyć nowy oddział o nazwie „subbranch_of_b1” w gałęzi o nazwie „branch1” wykonaj następujące kroki:

  1. Kasa lub zmiana na „oddział1”

    git checkout branch1
    
  2. Teraz utwórz nową gałąź o nazwie „subbranch_of_b1” pod „branch1” za pomocą następującego polecenia.

    git checkout -b subbranch_of_b1 branch1
    

    Powyższe spowoduje utworzenie nowej gałęzi o nazwie subbranch_of_b1 pod gałęzią gałąź 1 (zauważ, że branch1w powyższym poleceniu nie jest obowiązkowe, ponieważ HEAD obecnie wskazuje na to, możesz to sprecyzować, jeśli jesteś na innej gałęzi).

  3. Teraz po pracy z subbranch_of_b1 możesz zatwierdzać i wypychać lub scalać je lokalnie lub zdalnie.

Przykładowa graficzna ilustracja tworzenia oddziałów pod inną gałęzią

wypchnij subbranch_of_b1 do zdalnego

 git push origin subbranch_of_b1 

7
jak wcisnąć subbranch_of_b1 do zdalnego ??
user269867,

13
@ user269867: „git push origin subbranch_of_b1” wykona tę pracę za Ciebie.
Praveen George,

4
Teraz, jeśli wypchnę zmiany do mastera, czy pojawią się one automatycznie w gałęzi 1?
Mistrz Yoda,

2
Zauważ, że branch1 w powyższym poleceniu nie jest obowiązkowe, ponieważ głowa jest obecnie wskazuje na to, że można precyzyjnie jeśli jesteś na innym oddziale, choć to właśnie szukałem
felipsmartins

10
Przyszedłem tutaj, zastanawiając się, czy git checkout -b some-branchjest to skrót git checkout -b some-branch master. Okazuje się, że git checkout -b some-branchjest to skrótgit checkout -b some-branch <current_active_branch>
Frank Henard,

45

Utwórz oddział

  • Utwórz gałąź, gdy gałąź główna jest wyewidencjonowana. Tutaj zatwierdzenia w systemie głównym zostaną zsynchronizowane z utworzoną gałęzią.

    $ git branch branch1

  • Utwórz gałąź, gdy gałąź 1 jest wyewidencjonowana. Tutaj zatwierdzenia w oddziale 1 zostaną zsynchronizowane z oddziałem 2

    $ git branch branch2


Przejdź do oddziału

polecenie git checkout przełącza gałęzie lub przywraca działające pliki drzewa

  • $ git checkout branchname

Zmiana nazwy oddziału

  • $ git branch -m branch1 newbranchname

Usuń oddział

  • $ git branch -d branch-to-delete
  • $ git branch -D branch-to-delete ( wymuś usunięcie bez sprawdzania scalonego stanu )

Utwórz i zmień oddział

  • $ git checkout -b branchname

Oddziały, które są całkowicie uwzględnione

  • $ git branch --merged


************************** Różnice między gałęziami [git diff branch1..granch2] ************** **********

Różnica wieloliniowa
  • $ git diff master..branch1
Różnica pojedynczej linii
  • $ git diff --color-words branch1..branch2

1
Również po zmianie nazwy gałęzi użyj git push origin :old-name new-namedo usunięcia gałęzi zdalnej o starej nazwie i wciśnij gałąź lokalną o nowej nazwie.
95faf8e76605e973

13

Wykonuj równoczesne prace w devoddziale. W twoim scenariuszu gałąź funkcji przesuwa się do przodu od wierzchołka gałęzi deweloperów, ale gałąź deweloperów się nie zmienia. Łatwiej jest rysować jako linię prostą, ponieważ można ją traktować jako ruch do przodu. Dotarłeś do punktu A na dev, a stamtąd po prostu kontynuowałeś równoległą ścieżkę. Dwie gałęzie tak naprawdę się nie rozeszły.

Teraz, jeśli dokonasz zatwierdzenia na dev, przed scaleniem, zaczniesz ponownie od tego samego zatwierdzenia, A, ale teraz funkcje przejdą do C i dev do B. To pokaże podział, który próbujesz wizualizować, jako gałęzie teraz się rozeszły.

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

Przeciw

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

9

Git 2.23 wprowadza git switchi git restorerozdziela obowiązkigit checkout

Tworzenie nowej gałęzi z istniejącej gałęzi od git 2.23:

git switch -c my-new-branch

Przeniesiono do nowej gałęzi „moja nowa gałąź”

  • -c jest skrótem od --create i zastępuje dobrze znane polecenie git checkout -b

Spójrz na ten post na blogu Github, wyjaśniając bardziej szczegółowo zmiany:

Git 2.23 wprowadza nową parę eksperymentalnych poleceń do zestawu istniejących: git switch i git restore . Te dwa mają ostatecznie zapewnić lepszy interfejs dla dobrze znanego kasy. Nowe polecenia mają wyraźne rozdzielenie, starannie dzieląc wiele obowiązków związanych z kasą git


9

Aby utworzyć gałąź z innej gałęzi w katalogu lokalnym, możesz użyć następującego polecenia.

git checkout -b <sub-branch> branch

Na przykład:

  • nazwa nowego oddziału, który ma zostać utworzony „XYZ”
  • nazwa oddziału ABC, pod którym należy utworzyć XYZ
git checkout -b XYZ ABC

3

Jeśli chcesz utworzyć gałąź z innej gałęzi, wykonaj następujące kroki:

Założenia :

  1. Jesteś obecnie w oddziale głównym.
  2. Nie masz żadnych zmian do zatwierdzenia. (Jeśli masz jakieś zmiany do zatwierdzenia, ukryj je!).
  3. BranchExistingto nazwa oddziału, z którego należy utworzyć nowy oddział o nazwie BranchMyNew.

Kroki :

  1. Pobierz gałąź na komputer lokalny.

    $ git fetch origin BranchExisting : BranchExisting
    

To polecenie utworzy w oddziale lokalnym nowy oddział o tej samej nazwie.

  1. Teraz, od kasy głównej gałęzi do nowo pobranej gałęzi

    $ git checkout BranchExisting
    
  2. Jesteś teraz w BranchExisting. Teraz utwórz nową gałąź z tej istniejącej gałęzi.

    $ git checkout -b BranchMyNew
    

Proszę bardzo!


1

Aby utworzyć gałąź z innej, możesz również użyć tej składni:

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

Jest nieco krótszy niż „git checkout -b” + „git push origin”

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.