Mercurial: Как я могу сделать снимок моего рабочего каталога без изменений?
Работая над новой функцией, я пришел к точке, где она примерно работает, но все еще не к той точке, где я хочу создать набор изменений. Однако я бы создал "точку восстановления" или "snapsnot", чтобы я мог вернуться к этой грубо работающей версии моей кодовой базы. В TFS я бы создал набор полок.
В Mercurial наборы полок ведут себя по-разному: как только я перемещаю файл в полку, файл возвращается в состояние последнего набора изменений. Поэтому для моей цели создания снимка и продолжения работы такое поведение делает откладывание не решением.
How can I snapshot my work and continue with the files as they are?
Я знаю, что здесь много вопросов о стеллажах в Mercurial, но я не смог найти в них ответа на этот вопрос.
Прокомментируйте полезные ответы @Mathiasdm и @Gill Bates
Сейчас я перейду к commit --amend, который также доступен в TortoisHG: кнопка коммита может быть преобразована в кнопку изменения.
Ammend добавляет изменения в предыдущий коммит вместо создания нового набора изменений. Так
- сначала я создаю коммит с грубой версией, а затем
- улучшить его, исправив его.
"hg shelve && hg unshelve --keep" и расширение mq являются хорошими альтернативами.
2 ответа
Одна команда, которая особенно подходит для этого:
hg commit --amend
Это позволяет вам создавать коммит и постоянно улучшать его (внося в него поправки). Каждый раз, когда вы делаете 'hg commit --amend', все дополнительные изменения в рабочем каталоге добавляются в него.
Я знаю, что это не звучит как "полочка", но звучит так, будто вам нужно не полка.
Есть много способов достижения цели:
откладывать в долгий ящик
Вы можете использовать эту команду:
hg shelve && hg unshelve --keep
Он создаст полку, а затем откроет ее в рабочем пространстве, сохраняя полку на полке.
Расширение MQ
Существует также расширение MQ, которое позволяет вам управлять коммитами в виде патчей. Вы можете создать снимок с помощью:
hg qnew my_snapshot_name
Затем вы сможете обновить его, отменить, повторно применить, изменить порядок, преобразовать в обычные наборы изменений и сделать другие полезные вещи, проверить ссылку для получения информации.
заплата
Вы можете сохранить только патч:
hg diff > tmp.diff
И затем примените это с:
hg import tmp.diff
Или с:
patch -p1 < tmp.diff
Или вы можете импортировать в MQ:
hg qimport tmp.diff
Особенность ветки
Вы можете настроить рабочий процесс VCS и использовать так называемые "функциональные ветви", чтобы хранить в нем прогресс, зависящий от функции, и не загрязнять его основной веткой:
hg branch feature/my_stufff
... work work work ...
hg commit -m 'some progress'
... polish debug finalize ...
hg commit -m 'now it really works'
Затем вам нужно распространить ваши изменения в основной ветке. Вы можете сделать это с расширением rebase, если хотите сохранить свою историю линейной:
hg rebase -s feature/my_stuff -d default --collapse
Он займет всю ветвь объекта, поместит ее поверх ветви по умолчанию и объединит все наборы изменений ветви функций в один набор изменений. Конечно, вы можете сделать ребаз без разрушения.
Или вы можете просто скомбинировать вашу ветку Feature с веткой по умолчанию:
hg update default && hg merge feature/my_stuff
Это сохранит нелинейность.