В Mercurial, какая разница между hg-трансплантатом и hg rebase
Я знаю, что Rebase является (в комплекте) расширением, а Graft является ядром (который заменил расширение Transplant (в комплекте)).
graft
документируется как:
скопировать изменения из других ветвей на текущую ветвь
Эта команда использует Mercurial merge logic для копирования отдельных изменений из других ветвей без объединения ветвей в графе истории. Это иногда называют "backporting" или "cherry-picking".
rebase
документируется как:
Rebase позволяет перемещать объекты в истории Mercurial (используя ряд внутренних слияний). Это имеет много применений:
- перемещение наборов изменений между ветвями
- "линеаризация" истории
- переупорядочение наборов изменений
- сворачивание нескольких изменений в один набор изменений
Оба, похоже, используют слияние для перемещения или копирования наборов изменений между ветвями.
Графические копии. Перемещение перемещается. Но rebase --keep
копии.
Так часто кажется, что я могу выполнить свою задачу по копированию набора изменений в любом случае.
Имеет ли значение то, что я использую? Когда я должен отдать предпочтение другому?
например. следует ли прививать только при копировании в другую именованную ветвь? Или только когда есть только один набор изменений?
Изменить: может ли быть, что rebase является потенциально опасным надмножеством трансплантата, но может использоваться только с draft
наборами изменений во время разработки для редактирования локальной истории, тогда как трансплантат является безопасным подмножеством rebase, который может использоваться с public
изменения во время обслуживания для резервного копирования?
Ответы
Ответ 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.