Mercurial: вернуть один кусок
Как мне вернуть один кусок в Mercurial, аналогично тому, как это делается в darcs, т.е. спрашивает у меня для каждого hunk и файла, хочу ли я его вернуть? Возможно ли использование TortoiseHg?
Спасибо
Ответы
Ответ 1
Расширение record
вдохновлено darcs record
. Это позволит вам добавлять только определенные куски к следующему фиксации, т.е. Противоположно тому, что вы хотите. Но вы можете добавить все hunks, кроме тех, которые хотите вернуть, а затем сделать hg revert
, чтобы вернуть его. Немного назад, я знаю...: -)
Вы также можете сделать hg diff > patch; hg revert
, отредактировать patch
, чтобы удалить кусок и сделать hg import --no-commit
, чтобы восстановить патч. Скорее всего, это быстрее, но вам нужно вручную отредактировать патч. Я имел большой успех с Emacs diff-mode
, но так как вы спрашиваете о TortoiseHg, вы можете не захотеть использовать Emacs.
Ответ 2
На самом деле mercurial относится к "кускам", по крайней мере, в инструменте Shelve. Это приносит мне любимый способ вернуть их (и любимые функции TortoiseHg).
Просто переместите куски, которые вы хотите вернуть, на полку, созданную исключительно с намерением удалить. Это работает очень хорошо, пока куски идентифицированы так, как вам нужно. Если нет, у вас нет выбора, кроме как сделать что-то вручную.
Если вы используете TortoiseHg Workbench или VisualHg, очень легко добраться до инструмента Shelve: есть кнопка рядом с кнопками переключения режима дифференциала. Если вы не знакомы с полками, сделайте себе одолжение и начните использовать его. Это сэкономило мне много обострения, когда я забыл сделать это раньше или решил оставить экспериментальный код из фиксации.
Ответ 3
Для изменения набора изменений в одном файле попробуйте:
hg diff -c | patch -R
Это изменит набор изменений, внесенный этой версией на это имя файла. Теперь, если бы такое поведение darcs/ git стиля вишни могло быть включено в это, я бы очень обрадовался.