Перебазирование / дублирование ветки функций в более старую версию - PullRequest
0 голосов
/ 07 июня 2018

Я хочу сделать бэкпорт коммитов из одной ветки в одну более старую ветку.Как мне это сделать?Я знаю, что мог бы, например, выбрать вишню каждый коммит один за другим, но какой самый простой способ сделать это?

Из этого:

___(a)__(b)__(c)__(d)__(e)__(f)__(g) <- master
    \    \             /
     \    (1)__(2)__(3) <- feature
      \
       (x)__(y)__(z) <- old release

К этому:

___(a)__(b)__(c)__(d)__(e)__(f)__(g) <- master
    \    \             /
     \    (1)__(2)__(3) <- feature
      \
       (x)__(y)__(z)__(1)__(2)__(3) <- old release with feature

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

Вы можете запустить команду cherry-pick с диапазоном, например git cherry-pick b..3.Я бы рекомендовал этот способ, если вы не хотите изменять указатель ветки.

https://git -scm.com / docs / git-cherry-pick # git-cherry-pick-ltcommitgt82308203

0 голосов
/ 07 июня 2018

Во-первых, давайте рассмотрим, что бы здесь делала обычная «перебазировка» в ветку релиза:

  • git не знает, что задействовано master, поэтому видит только две ветви: особенностьс коммитами a-b-1-2-3 и релизом с коммитами a-x-y-z
  • поэтому общая точка ветвления равна a, так что коммиты, подлежащие перебазированию, будут b-1-2-3
  • , новая ветвь будетв итоге получим a-x-y-z-b-1-2-3, вставляя коммит (b), который на практике может быть большим фрагментом master

К счастью, команда git rebase имеет форму с тремя аргументами, которая страница справочника сводится к следующему:

git rebase --onto <newbase> <upstream> <branch>

Но, возможно, лучше объяснить это как:

git rebase --onto <new-parent> <old-parent> <branch>

В вашем примере:

  • <newbase> / <new-parent> будет коммитом (z): точка, на которую вы хотите получить коммиты, на
  • <upstream> / <old-parent> будет коммитом (b): точка, где коммиты вас интересуютв текущей ветке от (текущий родитель первого коммита, который вас интересует)
  • <branch> would будет именем ветви объекта, которая в данный момент указывает на (3), и которая вместо этого будет указывать на новую перебазированную историю

Вы можете пропустить последний аргумент, и он будет просто использоватькакая ветка в данный момент проверена;если указано, это должно быть имя ветви.Другими двумя аргументами могут быть все, что идентифицирует коммит - имя ветви, имя тега или просто хеш коммита.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...