Как "hg rebase" относился к вам до сих пор? Вы обнаружили какие-либо ошибки или gotchas? В каких ситуациях он заменяет или дополняет mq?
Каковы ваши впечатления, используя новую команду "hg rebase"?
Ответ 1
Rebase очень хорош в простом случае (нет или несколько конфликтов слияния), но если у вас их много, может быть больше проблем, чем это стоит, по сравнению с обычным слиянием + commit:
Rebase изменяет ваши фиксации и изменяет историю и по умолчанию удаляет исходные коммиты. Это имеет ряд последствий, которые довольно волосатые, если они попали вам в плохую минуту:
- Невозможно увидеть, как вы разрешили конфликты. (то есть разницу между вашим первоначальным фиксацией и переустановкой, если вы не решите сохранить их и вручную удалить их перед нажатием)
- Никакой способ проверить, что каждая пересмотренная ревизия слита нормально, компилирует и работает нормально, прежде чем совершать их. Вы переустанавливаете свои изменения. (такое же исключение, как указано выше)
- Если вы действительно делаете распределенные материалы и обмениваетесь/извлекаете из многих источников, вы должны быть предельно осторожны, чтобы не делиться никакими коммитами, которые вы намереваетесь переупаковать.
- Кроме того, если в приведенном выше сценарии вы случайно переустановите, то вытащите эти пре-rebase-коммиты у кого-то, вы получите двойной набор коммитов и вам нужно "hg strip" из одного набора из них. (Я не пытался слиться здесь.)
Проблема в том, что rebase редактирует историю. Это то, что SVN делает для "обновления". Таким образом, это определенно то, что вы могли бы использовать, но если у вас много выдающихся коммитов и ожидаете много конфликтов, я рекомендую вместо этого слияние.
Ответ 2
Самое большое преимущество над MQ (Mercurial Queues) заключается в том, что когда вы нажимаете очередную патч на измененный baselayer, вы получаете файлы .rej и должны вручную исправлять патч. С rebase вы вместо этого получаете слияние и запускаете стандартные инструменты merge-rsolution.
Ответ 3
Я вижу проблемы с тегами, которые указывают на переустановленную ветку.
.hgtags @XXXXXXXXXXXX, строка 2: тег 'XXX' относится к неизвестному node
Кажется, что теги неправильно конвертируются.