Створіть філію в Git з іншої гілки


989

У мене є дві гілки: майстер і дев

Я хочу створити "функціональну гілку" з гілки розробників .

В даний час у відділенні dev, я роблю:

$ git checkout -b myfeature dev

... (деяка робота)

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

Але, візуалізуючи свої гілки, я отримав:

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

Я маю на увазі, що галузь здається ff об'єднаною, і я не розумію, чому ...

Що я роблю неправильно?

Чи можете ви пояснити мені, будь ласка, як ви від'єднаєтесь від іншої гілки та повернетесь до віддаленого сховища для гілки функцій?

Все це у моделі розгалуження, як описана тут .

Відповіді:


1431

Якщо вам сподобався метод у посиланні, яке ви опублікували, подивіться на Git Flow .

Це набір сценаріїв, які він створив для цього робочого процесу.

Але щоб відповісти на ваше запитання:

$ git checkout -b myFeature dev

Створює гілку MyFeature off dev. Зробіть свою роботу і тоді

$ git commit -am "Your message"

Тепер приєднайте свої зміни до розробника без перемотки вперед

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

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

$ git push origin dev
$ git push origin myFeature

І ти побачиш, як хочеш.


32
у чому важливість наполегливості myFeatureпісля того, як вона була об'єднана дотепністю dev?
Олександр Сурафель

3
@spartacus Якщо myFeatureгілка була висунута на сервер перед об'єднанням, то нічого. Але якщо myFeatureйого ще не натискають на сервер, і ви хочете, щоб він з'явився на сервері, ви повинні натиснути його.
xOneca

13
є git checkout -b myFeature devтакий же , як ці 3 команди: git checkout dev, а потім git branch myFeature, а потім git checkout myFeature?
Кевін Мередіт

3
Так є, або має бути. Ви бачите щось інше?
Абізерн

33
Для уточнення для інших новачків, ось як --no-ffвиглядає злиття
A__

407

Якщо ви хочете створити нову гілку з будь-якої з існуючих гілок у Git, просто дотримуйтесь параметрів.

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

  • майстер
  • дев
  • відділення1

Отже, якщо ви хочете створити нову гілку під назвою "subbranch_of_b1" під гілкою під назвою "branch1", виконайте наступні дії:

  1. Оформити замовлення або перейти на "відділення1"

    git checkout branch1
    
  2. Тепер створіть нову гілку під назвою "subbranch_of_b1" під "branch1" за допомогою наступної команди.

    git checkout -b subbranch_of_b1 branch1
    

    Вище створить нову гілку під назвою subbranch_of_b1 під гілки branch1 (зверніть увагу , що branch1в наведеній вище команді не є обов'язковим , так як голова в даний час вказує на нього, ви можете точніше це , якщо ви перебуваєте на іншій гілці , хоча).

  3. Тепер, працюючи з subbranch_of_b1, ви можете виконувати та натискати або об'єднувати його локально або віддалено.

Зразок графічної ілюстрації створення гілок під іншою гілкою

натисніть на subbranch_of_b1 на віддалений

 git push origin subbranch_of_b1 

7
як натиснути subbranch_of_b1 на віддалений ??
користувач269867

13
@ user269867: "git push origin subbranch_of_b1" зробить цю роботу за вас.
Praveen George

4
Тепер, якщо я натискаю зміни на головний, чи відбудуться вони у відділенні1 автоматично?
Майстер Йода

2
зауважте, що branch1 у наведеній вище команді не є обов’язковою, оскільки HEAD наразі вказує на неї, ви можете точно вказати її, якщо ви знаходитесь на іншій гілці, хоча саме це я шукав
felipsmartins

10
Я прийшов сюди, цікавлячись, чи git checkout -b some-branchце стенограма git checkout -b some-branch master. Виявляється, git checkout -b some-branchце скороченняgit checkout -b some-branch <current_active_branch>
Френк Хенард

45

Створіть відділення

  • Створіть гілку, коли перевіряється головна гілка. Тут звернення в програмі master буде синхронізовано з створеною вами гілкою.

    $ git branch branch1

  • Створіть відділення, коли відмічена галузь1. Тут комісії у відділенні1 будуть синхронізовані з гілкою2

    $ 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

1
Також після перейменування гілки використовуйте git push origin :old-name new-nameдля видалення віддаленої гілки старої назви та натисніть локальну гілку нового імені.
95faf8e76605e973

13

Робіть одночасну роботу над dev гілці. Що трапляється, це те, що у вашому сценарії гілка функції рухається вперед від кінця гілки dev, але гілка dev не змінюється. Простіше малювати як пряму, оскільки це можна вважати як рух вперед. Ви встигли вказати А на дев, і звідти просто продовжили паралельним шляхом. Дві гілки насправді не розійшлися.

Тепер, якщо ви зробите посилання на dev, перед об'єднанням, ви знову почнете з того ж фіксу, A, але тепер функції перейдуть до C і dev до B. Це покаже розкол, який ви намагаєтеся візуалізувати, як гілки тепер розійшлися.

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

Проти

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

9

Git 2.23 вводить git switchі git restoreрозподіляє обов'язкиgit checkout

Створення нової гілки з існуючої гілки з git 2.23:

git switch -c my-new-branch

Переключився на нову гілку "моя-нова-філія"

  • -c короткий для --create і замінює відомий git check -b

Погляньте на цю публікацію в блозі Github, де детальніше пояснюються зміни:

Git 2.23 пропонує нову пару експериментальних команд до набору існуючих: git switch та git recovery . Ці два покликані врешті-решт забезпечити кращий інтерфейс для відомих git checkout. Нові команди мають намір чітко відокремитись, чітко визначивши, у чому багато обов'язків при проведенні перевірок


9

Щоб створити гілку з іншої гілки у вашому локальному каталозі, ви можете скористатися наступною командою.

git checkout -b <sub-branch> branch

Наприклад:

  • назва нової філії, яку слід створити "XYZ"
  • назва філії ABC, під якою має бути створений XYZ
git checkout -b XYZ ABC

3

Якщо ви хочете зробити гілку з іншої гілки, виконайте наступні кроки:

Припущення :

  1. Ви зараз перебуваєте в головній галузі.
  2. У вас немає змін для здійснення. (Якщо у вас є якісь зміни, які потрібно здійснити, приберіть їх!).
  3. BranchExisting- це назва гілки, з якої потрібно зробити нову гілку з назвою BranchMyNew.

Кроки :

  1. Підключіть гілку до локальної машини.

    $ git fetch origin BranchExisting : BranchExisting
    

Ця команда створить нову гілку у вашому локальному регіоні з такою ж назвою гілки.

  1. Тепер від майстер-каси до новоспеченої гілки

    $ git checkout BranchExisting
    
  2. Ви зараз у відділенні, що існує. Тепер створіть нову гілку з цієї існуючої гілки.

    $ git checkout -b BranchMyNew
    

Ось ви йдете!


1

Для створення гілки з іншої також можна використовувати цей синтаксис:

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

Це трохи коротше, ніж "git checkout -b" + "git push origin"

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.