2010-12-17 26 views
501

Mam dwa oddziały: mistrzowskie i devutworzyć oddział w Git z innego oddziału

Chcę stworzyć „gałąź funkcji” z dev gałęzi.

Obecnie na dev oddziału, robię:

$ git checkout -b myfeature dev 

... (niektóre prace)

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

Ale po wizualizacji moje gałęzie, mam:

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

Mam na myśli to, że oddział wydaje się być połączony i nie rozumiem, dlaczego ...

Co robię źle?

Czy możesz wyjaśnić mi proszę, w jaki sposób oddzielasz się od innej gałęzi i przekazujesz z powrotem do zdalnego repozytorium dla gałęzi funkcji?

Wszystko to w modelu rozgałęzionym, takim jak the one described here.

+9

znajdziesz wiele łatwiej wyciągnąć wc od bloków (wcięć cztery spacje lub użyj przycisku 101010 lub ctrl-k) niż w cudzysłowach blokowych. Losowy przykład: http://stackoverflow.com/questions/2474353/how-to-copy-commits-from-one-branch-to-another/2474371#2474371 – Cascabel

Odpowiedz

731

Jeśli podoba Ci się metoda z opublikowanego linku, spójrz na numer Git Flow.

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

jednak odpowiedzieć na pytanie:

$ git checkout -b myFeature dev 

Tworzy MyFeature odgałęzienie dev. Zrobić swoją pracę, a następnie

$ git commit -am "Your message" 

teraz scalić zmiany dev bez fast-forward

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

edycji

Teraz pchania zmian do serwera

$ git push origin dev 
$ git push origin myFeature 

I zobaczysz, jak tego chcesz.

+0

Dzięki za odpowiedź;) Zrobiłem to samo (bez scalania) Po przejrzeniu kodu źródłowego Git Flow jest mniej więcej to samo ... Nie rozumiem dlaczego, kiedy tworzę gałąź funkcji, zatwierdzam i wciskam do niej (zdalnie), gałąź wydaje się scalona, ​​gdy wizualizuję wszystkie moje gałęzie – revohsalf

+0

Ponieważ przesuwasz gałąź myFeature na serwer i pokazuje ona, że ​​zniknęła z gałęzi dev. Nie ma scaleń. Mój przykład łączy się z gałęzią dev i przesuwa tę gałąź do serwera. – Abizern

+0

Zaktualizowałem moją odpowiedź. – Abizern

9

Wykonaj jednoczesną pracę w oddziale dev. Co się dzieje, to w twoim scenariuszu gałąź cech porusza się naprzód od wierzchołka gałęzi dev, ale gałąź dev nie zmienia się. Łatwiej jest rysować jako linię prostą, ponieważ można ją traktować jako ruch do przodu. Zrobiłeś to, by skierować A na dev, a stamtąd po prostu kontynuowałeś równoległą ścieżką. Te dwie gałęzie tak naprawdę się nie rozdzieliły.

Teraz, jeśli wykonasz commit 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ć , ponieważ gałęzie już się rozdzieliły.

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

Versus

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

Jeśli chcesz utworzyć nowy oddział z któregokolwiek z istniejących oddziałów w Git, wykonaj następujące opcje.

Pierwsza zmiana/zamówienie do oddziału, z którego chcesz utworzyć nowy oddział. Na przykład, jeśli masz następujące branże, takie jak:

  • mistrz
  • dev
  • branch1

Więc jeśli chcesz utworzyć nowy oddział o nazwie "subbranch_of_b1" w ramach oddziału o nazwie "branch1" wykonaj następujące kroki:

  1. kasę lub zmienić w "branch1"

    git checkout branch1 
    
  2. Teraz utworzyć nowy oddział o nazwie "subbranch_of_b1" pod " branch1 " za pomocą następującego polecenia.

    git checkout -b subbranch_of_b1 branch1 
    

    Powyższy stworzy nowy oddział o nazwie subbranch_of_b1 w gałęzi branch1 (zauważ, że branch1 w powyższym poleceniu nie jest obowiązkowe, ponieważ głowa jest obecnie wskazując na niego, można precyzyjnie, jeśli jesteś jednak w innej branży).

  3. Teraz po pracy z subbranch_of_b1 można zatwierdzić i wypchnąć lub scalić go lokalnie lub zdalnie.

A sample Graphical Illustration Of Creating Branches Under another Branch

+1

jak przesunąć subbranch_of_b1 do zdalnego? – user269867

+7

@ user269867: "git push origin subbranch_of_b1" zrobi to za Ciebie. –

+0

Teraz, jeśli pchnę zmiany do wzorca, czy wystąpi automatycznie w gałęzi 1? –

-1
git checkout branchName 

przełączony na inny oddział "BRANCHNAME"

+4

To tylko tworzy je z bieżącego oddziału , niekoniecznie tam, gdzie chcesz odgałęzić. @ Alex's [odpowiedź] (http://stackoverflow.com/a/32391944/5804443) jest poprawną odpowiedzią IMO. –

10

utworzyć oddział

  • Tworzenie oddziału gdy mistrz oddziału jest wyrejestrowany. Tutaj zatwierdzenia w systemie głównym zostaną zsynchronizowane z utworzonym oddziałem.

    $ git branch branch1

  • Utwórz gałąź, gdy branch1 jest wyrejestrowany.Tutaj popełnia w branch1 będą synchronizowane z Branch2

    $ git branch branch2


kasę oddziału

gałęzie przełączników polecenie checkout git lub przywracania plików drzewo robocze

  • $ git checkout branchname

Zmiana nazwy Oddział

  • $ git branch -m branch1 newbranchname

Usuwanie Oddział

  • $ git branch -d branch-to-delete
  • $ git branch -D branch-to-delete (usunięcie siłą bez sprawdzania statusu scalony)

Tworzenie i Switch Oddział

  • $ git checkout -b branchname

Branże, które są całkowicie zawarte

  • $ git branch --merged


****************** ******** Różnice oddziałów [git diff oddział1 ..Branch2] ************************

różnica wielowierszowego
  • $ git diff master..branch1
SingleLine różnica
  • $ git diff --color-words branch1..branch2
+0

dzięki za dodatkowe polecenia. . . –

Powiązane problemy