В 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 для получения более подробной информации.