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 стиля вишни могло быть включено в это, я бы очень обрадовался.