В Mercurial в чем разница между HG graft и HG rebase

Я знаю Rebase расширение (в комплекте), в то время как Графт является основной функцией (которая заменила пересадки (в комплекте) расширение).

graft описан как:

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

эта команда использует логику слияния Mercurial для копирования отдельных изменений из других ветвей без слияния ветвей в графике истории. Это иногда известный как "backporting" или "сбор вишни".

rebase описан как:

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

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

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

Графт копии. Ребаз движется. Но!--2--> копии.

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

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


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

1 ответов


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

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

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

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

посмотреть the graft документация и документация по расширению Rebase для получения более подробной информации.