Mercurial совершать только совет - PullRequest
2 голосов
/ 10 января 2011

В моей настройке у меня есть центральный репозиторий Hg, в который я отправляю свои локальные изменения. Скажем, в моем локальном клоне у меня есть серия локальных коммитов, а затем я хочу перенести изменения в центральное репо. Как я могу выдвинуть только конечное состояние, не включая все «маленькие» локальные коммиты, которые я сделал?

Я хочу этого, потому что иногда я не хочу загрязнять историю центрального репо всеми небольшими локальными коммитами, которые я сделал.

Ответы [ 4 ]

6 голосов
/ 10 января 2011

Почему вы хотите это сделать?Внесение небольших изменений позволяет легко что-то вернуть.Если вы соберете все в один большой коммит, отменить небольшое изменение может быть не так просто.

2 голосов
/ 10 января 2011

Я согласен с Бьорном (и я голосую за его ответ), то, что вы делаете, не является хорошей идеей - значимая история - хорошая вещь.Если вы не можете отговорить от этого, то вы пытаетесь не просто нажать последний набор изменений, но новый набор изменений, который является комбинацией всех этих наборов изменений.Самый простой способ сделать это - использовать расширение свертывания, хотя mq или даже export / import могут это сделать.Ключевым моментом здесь является то, что при объединении нескольких наборов изменений в одну вы переписываете историю, и вы собираетесь удалить свои существующие наборы изменений и заменить их этим новым комбинированным набором изменений.Это нарушает неизменность истории, которая делает Mercurial таким достойным доверия.

1 голос
/ 10 января 2011

Как это сделать без каких-либо расширений, объясняется на вики-странице mercurial ConcatenatingChangesets .

Эта страница также ссылается на несколько альтернативных подходов с расширениями hg, таких как CollapseExtension .

0 голосов
/ 10 января 2011

Можно переписать вашу историю, используя расширение 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-й версии.

...