Mercurial, зафиксируйте изменения в рабочей копии в другой ветке

#mercurial #branch #working-copy

#mercurial #ветка #рабочая копия

Вопрос:

Я забыл переключить свою рабочую копию обратно на правильную ветку и внес некоторые изменения.

Как я могу зафиксировать текущие изменения (но не все другие изменения в текущей ветке) в моей исходной ветке?

Ответ №1:

Если я правильно понимаю, у вас есть незафиксированные изменения, которые должны быть поверх другой ветки.

Мой предпочтительный способ — использовать функциональность shelf для сохранения всех ваших изменений, обновления до правильной ветки, а затем отменить хранение ваших изменений в соответствующей ветке.

Чтобы сделать это в командной строке, сохраните результат hg diff в файле исправления, затем обновите в другой ветке и hg import <patch> .

Наконец, просто зафиксируйте свой набор изменений, как вы хотели.

Комментарии:

1. Да, все еще быстрее и за меньшее количество шагов, чем MQ!

Ответ №2:

  • Расширение Shelve позволяет хранить WIP, получать чистый рабочий каталог, обновлять до необходимой ветки, выпускать shelve
  • MQ exension (как-то излишне) позволяет делать то же самое, что и shelve
  • Наконец, вы можете зафиксировать в неправильной ветке и переназначить этот набор изменений на правильный родительский, используя расширение перебазирования

Комментарии:

1. Спасибо. На самом деле я узнал, как это сделать в TortoiseHg, используя пункт контекстного меню «Пересадка локальных изменений», который, возможно, использует расширение Transplant или Graft .

2. @FelixDombek — пересадка не перемещается , только копирует набор изменений. Перебазирование (после активации) можно найти в Modify history Rebase для контекстного меню набора изменений SRC