Mercurial совершать только совет
В моей настройке у меня есть центральный репозиторий Hg, в который я отправляю свои локальные изменения. Скажем, в моем локальном клоне у меня есть серия локальных коммитов, а затем я хочу перенести изменения в центральное репо. Как я могу выдвинуть только конечное состояние, не включая все "маленькие" локальные коммиты, которые я сделал?
Я хочу этого, потому что иногда я не хочу загрязнять историю центрального репо всеми маленькими местными коммитами, которые я сделал.
4 ответа
Почему вы хотите это сделать? Внесение небольших изменений позволяет легко что-то вернуть. Если вы соберете все в один большой коммит, отменить небольшое изменение может быть не так просто.
Я согласен с Бьорном (и я одобряю его ответ), то, что вы делаете, не является хорошей идеей - значимая история - это хорошо. Если вы не можете отговорить от этого, то вы пытаетесь не просто нажать на последний набор изменений, но на новый набор изменений, который является комбинацией всех этих наборов изменений. Самый простой способ сделать это - использовать расширение свертывания, хотя mq или даже export / import могут это сделать. Ключевым моментом здесь является то, что при объединении нескольких наборов изменений в один вы переписываете историю, и вы собираетесь удалить существующие наборы изменений и заменить их этим новым комбинированным набором изменений. Это нарушает неизменность истории, которая делает Mercurial таким достойным доверия.
Как это сделать без каких-либо расширений, объясняется на вики-странице mercurial ConcatenatingChangesets.
Эта страница также ссылается на несколько альтернативных подходов с расширениями hg, таких как CollapseExtension.
Можно переписать вашу историю, используя расширение mq. Предположим, что ревизии, которые вы хотите свернуть, - это обороты, 5,6,7 с 7 - это совет. Вы бы сделали это через:
# Import the revs you want to collapse into mq
# mq will create patches for each revision from 5:tip, with the name
# <local rev number>.diff
hg qimport -r5:tip
# Goto the first commit
hg qgoto 5.diff
# Fold in the other commits successively. Aside from shell magic, there is
# no command line way to specify multiple patches at once.
hg qfold 6.diff
hg qfold 7.diff
# Commit the new mq patch as a changeset of its own
hg qfinish 5.diff
Теперь ваш репозиторий содержит только версию 5 с содержанием предыдущих версий 5, 6 и 7.