Каковы ваши впечатления, используя новую команду "hg rebase"?

Как "hg rebase" относился к вам до сих пор? Вы обнаружили какие-либо ошибки или gotchas? В каких ситуациях он заменяет или дополняет mq?

Ответ 1

Rebase очень хорош в простом случае (нет или несколько конфликтов слияния), но если у вас их много, может быть больше проблем, чем это стоит, по сравнению с обычным слиянием + commit:

Rebase изменяет ваши фиксации и изменяет историю и по умолчанию удаляет исходные коммиты. Это имеет ряд последствий, которые довольно волосатые, если они попали вам в плохую минуту:

  • Невозможно увидеть, как вы разрешили конфликты. (то есть разницу между вашим первоначальным фиксацией и переустановкой, если вы не решите сохранить их и вручную удалить их перед нажатием)
  • Никакой способ проверить, что каждая пересмотренная ревизия слита нормально, компилирует и работает нормально, прежде чем совершать их. Вы переустанавливаете свои изменения. (такое же исключение, как указано выше)
  • Если вы действительно делаете распределенные материалы и обмениваетесь/извлекаете из многих источников, вы должны быть предельно осторожны, чтобы не делиться никакими коммитами, которые вы намереваетесь переупаковать.
  • Кроме того, если в приведенном выше сценарии вы случайно переустановите, то вытащите эти пре-rebase-коммиты у кого-то, вы получите двойной набор коммитов и вам нужно "hg strip" из одного набора из них. (Я не пытался слиться здесь.)

Проблема в том, что rebase редактирует историю. Это то, что SVN делает для "обновления". Таким образом, это определенно то, что вы могли бы использовать, но если у вас много выдающихся коммитов и ожидаете много конфликтов, я рекомендую вместо этого слияние.

Ответ 2

Самое большое преимущество над MQ (Mercurial Queues) заключается в том, что когда вы нажимаете очередную патч на измененный baselayer, вы получаете файлы .rej и должны вручную исправлять патч. С rebase вы вместо этого получаете слияние и запускаете стандартные инструменты merge-rsolution.

Ответ 3

Я вижу проблемы с тегами, которые указывают на переустановленную ветку.

.hgtags @XXXXXXXXXXXX, строка 2: тег 'XXX' относится к неизвестному node

Кажется, что теги неправильно конвертируются.