Создать ветку в Git из другой ветки - PullRequest
779 голосов
/ 17 декабря 2010

У меня есть две ветви: master и dev

Я хочу создать «ветвь функций» из dev ветви.

В данный момент на ветке dev, я делаю:

$ git checkout -b myfeature dev

... (немного работы)

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

Но, увидев мои ветви, я получил:

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

Я имею в виду, что ветка кажется слитой, и я не понимаю, почему ...

Что я делаю не так?

Не могли бы вы объяснить, как вы переходите из другой ветки и возвращаетесь в удаленный репозиторий для ветви функций?

Все это в модели разветвления, такой как , описанной здесь .

Ответы [ 5 ]

1110 голосов
/ 17 декабря 2010

Если вам нравится метод, указанный в опубликованной вами ссылке, посмотрите на Git Flow .

Это набор сценариев, которые он создал для этого рабочего процесса.

Но чтобы ответить на ваш вопрос:

$ git checkout -b myFeature dev

Создает ветку MyFeature из dev.Выполняйте свою работу, а затем

$ git commit -am "Your message"

Теперь объедините ваши изменения с dev без перемотки вперед

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

Теперь отправьте изменения на сервер

$ git push origin dev
$ git push origin myFeature

Иты увидишь как хочешь.

313 голосов
/ 04 сентября 2015

Если вы хотите создать новую ветку из любой из существующих веток в Git, просто следуйте опциям.

Сначала измените / извлеките ветку, из которой вы хотите создать новую ветку. Например, если у вас есть следующие ветки, такие как:

  • мастер
  • DEV
  • branch1

Поэтому, если вы хотите создать новую ветвь с именем "subbranch_of_b1" под веткой с именем "branch1" , выполните шаги :

  1. Оформить заказ или поменять на "branch1"

    git checkout branch1
    
  2. Теперь создайте новую ветвь с именем "subbranch_of_b1" в "branch1" , используя следующую команду.

    git checkout -b subbranch_of_b1 branch1
    

    Приведенное выше создаст новую ветвь с именем subbranch_of_b1 в ветке branch1 (обратите внимание, что branch1 в приведенной выше команде не является обязательным, поскольку HEAD в данный момент указывает на нее Вы можете указать это, если находитесь в другой ветке).

  3. Теперь после работы с subbranch_of_b1 вы можете фиксировать и перемещать или объединять его локально или удаленно.

A sample Graphical Illustration Of Creating Branches Under another Branch

выдвинуть subfranch_of_b1 к удаленному

 git push origin subbranch_of_b1 
32 голосов
/ 08 декабря 2016

Создать ветвь

  • Создать ветвь при извлечении главной ветки.Здесь коммиты в master будут синхронизироваться с веткой, которую вы создали.

    $ git branch branch1

  • Создать ветвь, когда ветвь1 извлечена.Здесь коммиты в branch1 будут синхронизироваться с branch2

    $ git branch branch2


Извлечь ветку

git checkout ветки переключателя командыили восстановить файлы рабочего дерева

  • $ git checkout branchname

Переименование ветви

  • $ git branch -m branch1 newbranchname

Удалить ветку

  • $ git branch -d branch-to-delete
  • $ git branch -D branch-to-delete ( принудительное удаление без проверкиобъединенное состояние )

Создание и переключение ветви

  • $ git checkout -b branchname

Филиалы, которые полностью включены

  • $ git branch --merged


************************** Отличия веток [git diff branch1..branch2] ************************

Разностная разница
  • $ git diff master..branch1
Разница в одну строку
  • $ git diff --color-words branch1..branch2
13 голосов
/ 05 декабря 2014

Одновременная работа над веткой dev.Что происходит, так это то, что в вашем сценарии ветвь объектов движется вперед от вершины ветки dev, но ветка dev не изменяется.Проще нарисовать прямую линию, потому что это можно рассматривать как движение вперед.Вы сделали это, чтобы указать A на dev, и оттуда вы просто продолжили идти по параллельному пути.Две ветви на самом деле не разошлись.

Теперь, если вы сделаете коммит на dev, перед слиянием вы снова начнете с того же коммита, A, но теперь функции перейдут к C, а dev к B.Это покажет раскол, который вы пытаетесь визуализировать, поскольку ветви теперь разошлись.

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

Versus

       /----*DevB
*-----*DevA
       \----*FeatureC
0 голосов
/ 25 февраля 2019

Для создания ветки из другого можно также использовать этот синтаксис:

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

Это немного короче, чем "git checkout -b" + "git push origin"

...