Создайте ветвь в Git из другой ветки

У меня две ветки: мастер и dev

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

В настоящее время на ветке dev, я делаю:

$ git checkout -b myfeature dev

... (некоторые работы)

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

Но после визуализации моих ветвей я получил:

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

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

Что я делаю неправильно?

Можете ли вы объяснить мне, как вы отключаетесь от другой ветки и отсылаете обратно в удаленный репозиторий для ветки функции?

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

Ответ 1

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

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

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

$ git checkout -b myFeature dev

Создает ветвь MyFeature. Сделайте свою работу, а затем

$ git commit -am "Your message"

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

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

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

$ git push origin dev
$ git push origin myFeature

И вы увидите, как вы этого хотите.

Ответ 2

Если вы хотите создать новую ветку из любой из существующих веток в 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

нажмите subbranch_of_b1 на удаленный

 git push origin subbranch_of_b1 

Ответ 3

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

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

    $ git branch branch1

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

    $ git branch branch2


Оформить выделение

git ветки диспетчера команд проверки или восстановление рабочих файлов дерева

  • $ 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

Ответ 4

Выполняйте одновременную работу с ветвью dev. Случается, что в вашем сценарии ветвь функции перемещается вперед от кончика ветки dev, но ветвь dev не изменяется. Легче рисовать как прямую линию, потому что ее можно рассматривать как движение вперед. Вы сделали это, чтобы указать A на dev, и оттуда вы просто продолжили параллельный путь. Эти две ветки не расходились.

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

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

Против

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

Ответ 5

Git 2.23 представляет git switch и git restore, чтобы разделить обязанности git checkout

Создание новой ветки из существующей ветки с git 2.23:

git switch -c my-new-branch

Перешел на новую ветку 'my-new -b ranch'

  • -c - это сокращение от - -c reate и заменяет известную проверку git -b

.Посмотрите это сообщение в блоге Github, объясняющее изменения более подробно:

Git 2.23 приносит новую пару экспериментальных команд в набор существующих из них: git switch и git restore. Эти два предназначены в конечном итоге обеспечить лучший интерфейс для хорошо известного git checkout. Новый Команды намерены иметь четкое разделение, аккуратно поделить какие обязанности git checkout

Ответ 6

git checkout branchName

Переключено на другую ветку "branchName"

Ответ 7

Если вы хотите создать ветку из какой-то другой ветки, выполните следующие действия:

Предположения:

  1. Вы находитесь в основной ветке.
  2. У вас нет изменений для фиксации. (Если у вас есть какие-либо изменения, сохраните их!).
  3. BranchExisting - это название ветки, из которой вам нужно создать новую ветку с именем BranchMyNew.

Шаги:

  1. Загрузите ветку на свой локальный компьютер.

    $ git fetch origin BranchExisting : BranchExisting
    

Эта команда создаст новую ветку в вашей локальной сети с тем же именем.

  1. Теперь от извлечения главной ветки до вновь извлеченной ветки

    $ git checkout BranchExisting
    
  2. Вы сейчас в BranchExisting. Теперь создайте новую ветку из этой существующей ветки.

    $ git checkout -b BranchMyNew
    

Ну вот!

Ответ 8

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

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

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