Mercurial: вернуть один кусок

Как мне вернуть один кусок в Mercurial, как это делается в darcs, то есть он запрашивает у меня каждый файл и файл, хочу ли я вернуть его? Возможно ли использовать TortoiseHg?

Спасибо

3 ответа

Решение

record расширение вдохновлено darcs record, Это позволит вам добавлять только определенные фрагменты к следующему коммиту, т. Е. Противоположное тому, что вы хотите. Но вы можете добавить все фрагменты, кроме той, которую хотите вернуть, а затем выполнить hg revert чтобы вернуть это. Немного задом наперед, я знаю...:-)

Вы могли бы также сделать hg diff > patch; hg revert, редактировать patch удалить кусок и сделать hg import --no-commit чтобы перезапустить патч. Это, вероятно, быстрее, но требует, чтобы вы вручную редактировали патч. Я имел большой успех с Emacs diff-mode, но так как вы спрашиваете о TortoiseHg, вы можете не захотеть использовать Emacs.

На самом деле Mercurial относится к "кускам", по крайней мере, в инструменте Shelve. Что подводит меня к любимому способу их вернуть (и к любимым функциям TortoiseHg).

Просто переместите чанки, которые вы хотите вернуть, на полку, которую вы создаете исключительно с намерением удалить. Это работает очень хорошо, пока куски идентифицированы так, как вам нужно. Если нет, у вас нет выбора, кроме как сделать что-то вручную.

Если вы используете TortoiseHg Workbench или VisualHg, очень просто перейти к инструменту Shelve: рядом с кнопками переключения режима diff есть кнопка. Если вы не знакомы с полками, сделайте себе одолжение и начните использовать его. Это сильно спасло меня, когда я забыл о раннем коммите или решил пропустить экспериментальный код из коммита.

Для изменения набора изменений в одном файле попробуйте:

hg diff -c | патч -R

Это обратит ревизию, внесенную этой ревизией в это имя файла. Теперь, если бы в это можно было включить такое же поведение по сбору вишен в стиле darcs/git, я был бы очень счастлив.

Другие вопросы по тегам