2016-12-05 12 views
0

Я разветвил Mercurial репозиторий, размещенный на Bitbucket. У меня нет прав на запись для исходного репозитория. Я сделал несколько коммитов к своей вилке. Давайте назовем их A, B, C и D, то есть последним первым:Как сделать запрос на вытягивание только для одного конкретного коммита в Mercurial?

  • D [последнего]
  • C
  • B < --- Вытяните только изменения, сделанные в этой фиксации
  • A [старейший]

Теперь я хочу, чтобы сделать запрос тянуть за все изменения в фиксацию B исключительно, игнорируя A, C и D. есть ли способ сделать это?

ответ

2

Прежде всего, давайте разобраться, как выглядит ваш график. Предположим, что наконечник вашего разветвленного репо - x, и он имеет линейную историю без ветвления. Так что ваша история выглядит следующим образом:

[1000's of commits] -> parent(parent(x)) -> parent(x) -> x 

Теперь вы сделали четыре фиксаций именно A, B, C и D с A является самой старой и D будучи последнюю. Теперь вы график выглядит примерно так:

x -> A -> B -> C -> D 

Обратите внимание на истории раньше, чем x цел, ее не учтенные выше, потому что его не требуется часть информации для того, что мы обсуждаем.

Теперь вы хотите создать запрос на растяжение, содержащий только набор изменений B. Это невозможно в текущем состоянии, потому что основное репо не знает о A, которое также является родителем B. У вас не может быть ребенка до тех пор, пока он не будет/parent/s.

Так что если мы хотим просто сделать запрос на растяжение B изменений, нам необходимо rebase на x.

rebase является расширением в Mercurial, и вы можете включить его, добавив следующие строки в .hg/hgrc

[extensions] 
rebase = 

Давайте перебазироваться раз мы расширение включены.

hg rebase -s B -d x 

Это приведет:

x -> A 
    \-> B -> C -> D 

Теперь вы можете создать запрос тянуть, потому что родитель B «s является x. У вас также может быть более чистое состояние истории, перезагрузив C снова A. Это приведет к появлению двух ветвей: одного, содержащего наборы изменений, которые вы хотите нажать, других локальных наборов изменений.Перебазирования снова выглядит как:

hg rebase -s C -d A 

И результирующее состояние истории:

x -> A -> C -> D 
    \-> B 

Теперь вы можете легко создать запрос, содержащий только тянуть B ревизии.

Связанные Ссылка:

Rebase Extension