Объединить только одну ревизию из другой ветки - PullRequest
12 голосов
/ 19 августа 2011

Я новичок в Mercurial и прочитал, что невозможно объединить только отдельный набор изменений из другой ветки. Тогда я не знаю, как лучше всего это решить:

  1. Я начинаю со стабильной ревизии R1
  2. Я продолжаю разработку на R1: CS1, CS2, CS3
  3. В какой-то момент мне нужно устранить ошибку в моей стабильной ревизии R1. И я хочу применить только одну ревизию из линии разработки (например, CS2)

Какой лучший подход? Поскольку слияние не сработало, я сделал патч для CS2, а затем применил патч в новой стабильной ветке, чтобы исправить ошибку. Это Меркуриальный путь?

Приветствия

Ответы [ 2 ]

11 голосов
/ 27 июня 2014

ОБНОВЛЕНИЕ: больше не нужно никаких расширений с Hg 2.0

Как указал «CAD CAD», это именно то, для чего была введена команда graft , введенная в Hg 2.0.

SourceTree

Самый простой способ сделать это с помощью графического интерфейса, подобного SourceTree , просто дважды щелкните ветку TARGET для переключения, затем нажмите правую кнопку мыши на любой другой ревизии и выберите команду «Привить» (странно, что это также может быть ревизия текущей ветки). Если нет конфликтов, SourceTree немедленно создаст новую ревизию для текущей ветви.

TortoiseHg

Точно так же, выберите TARGET Branch, затем наберите над ревизией, которую вы хотите привить: Как привить с помощью TortoiseHg

Командная строка

Чтобы сделать это с помощью командной строки, просто переключитесь на ветку TARGET и затем выполните

hg graft -r {revision_number}

с {revision_number}, очевидно, номером ревизии, которую вы хотите включить в вашу текущую ветку. Это создаст новую ревизию в вашей текущей ветке со всеми файлами ревизии, номер которой вы использовали в команде.

Чтобы узнать больше о команде graft, прочитайте эту ветку здесь stackoverflow

7 голосов
/ 19 августа 2011

Расширение для трансплантации автоматизирует то, что вы сделали с одной командой.

Но я думаю, что предпочтительный способ (который, в зависимости от сценария, не всегда возможен) - это сначала сделать исправление поверх R1, а затем добавить его в свой совет по разработке.

То есть:

  1. Начать со стабильной ревизии R1.
  2. Вы делаете какую-то работу, cs1...csN.
  3. Важное исправление необходимо для стабильной вершины R1, поэтому вы hg update R1.
  4. Исправьте, это даст R2.
  5. Вернитесь туда, где вы остановились, hg update csN.
  6. Слияние стабильных, так что у вас есть исправление, hg merge R2, hg commit ...
  7. Продолжить работу над csN+1.
...