Подтвердить что ты не робот

В Mercurial, какая разница между hg-трансплантатом и hg rebase

Я знаю, что Rebase является (в комплекте) расширением, а Graft является ядром (который заменил расширение Transplant (в комплекте)).

graft документируется как:

скопировать изменения из других ветвей на текущую ветвь

Эта команда использует Mercurial merge logic для копирования отдельных изменений из других ветвей без объединения ветвей в графе истории. Это иногда называют "backporting" или "cherry-picking".

rebase документируется как:

Rebase позволяет перемещать объекты в истории Mercurial (используя ряд внутренних слияний). Это имеет много применений:

  • перемещение наборов изменений между ветвями
  • "линеаризация" истории
  • переупорядочение наборов изменений
  • сворачивание нескольких изменений в один набор изменений

Оба, похоже, используют слияние для перемещения или копирования наборов изменений между ветвями.

Графические копии. Перемещение перемещается. Но rebase --keep копии.

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

например. следует ли прививать только при копировании в другую именованную ветвь? Или только когда есть только один набор изменений?


Изменить: может ли быть, что rebase является потенциально опасным надмножеством трансплантата, но может использоваться только с draft наборами изменений во время разработки для редактирования локальной истории, тогда как трансплантат является безопасным подмножеством rebase, который может использоваться с public изменения во время обслуживания для резервного копирования?

4b9b3361

Ответ 1

hg graft позволяет "вишневый сбор", как вы отметили в своем вопросе. Например, вы можете запустить hg graft -D "2085::2093 and not 2091", чтобы скопировать только некоторые изменения из другой версии. Для сравнения, hg rebase (с или без --keep) будет захватывать любые изменения, которые вы указали, и все его разлагаемые изменения.

Кроме того, rebase позволяет свернуть набор изменений (с помощью --collapse). Насколько я могу судить, graft нет.

Еще одно отличие, которое я заметил: hg graft --edit 123 позволяет переделать ревизию 123 в рабочий каталог и отредактировать сообщение фиксации. Я не могу найти эквивалент hg rebase. Я должен отметить, однако, что hg histedit также позволяет редактировать сообщение фиксации при перезагрузке.

Есть, вероятно, другие различия, о которых я не думаю. SO community: не стесняйтесь указывать их в комментариях, и я с радостью пересмотрю этот ответ, чтобы сделать его более полным.

Подробнее см. документацию graft и документацию по расширению Rebase.