Могу ли я восстановить диапазон строк в файле с Mercurial? - PullRequest
15 голосов
/ 14 декабря 2010

Я часто замечаю некоторые нежелательные изменения, когда проверяю свою рабочую копию (с hg status и hg diff) прямо перед фиксацией.Например, я мог бы временно добавить или удалить некоторый код только на время сеанса отладки.

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

Ответы [ 7 ]

7 голосов
/ 14 декабря 2010

Я не уверен, что вы можете явно поменять отдельные строки, но в такой ситуации, как ваша, я делаю фиксацию хорошего кода и возвращаю остальные (код плохой )).Этот рабочий процесс прост с использованием расширения запись или crecord Mercurial (я рекомендую последнее).

5 голосов
/ 04 июня 2014

Если у вас включены расширения record и shelve , вы можете сделать следующее:

hg record -m "garbage"   # pick out and commit the change you want to revert
hg shelve --all          # temporarily hide other changes
hg strip tip             # remove the garbage changeset
hg unshelve              # restore the changes you want to keep
4 голосов
/ 14 декабря 2010

Один из способов - использовать графический инструмент сравнения, такой как kdiff3.Если вы передадите ему diff и выберете «объединить текущий файл», вы можете построчно выбирать то, что вам нужно.

Лучший способ - чаще делать коммиты.Если у вас есть привычка фиксировать прямо перед добавлением кода отладки, а затем зафиксировать или отменить ваш код отладки перед добавлением «реального» кода, это очень легко удаляет ваш код отладки, поскольку он имеет свою собственную ревизию.Кроме того, вы можете поместить свой код отладки в отдельную ветку.

3 голосов
/ 13 сентября 2016

Я делал это с помощью интерактивного пользовательского интерфейса в стиле ncurses hg revert -i, которое позволяет вам ходить и выбирать части, которые вы хотите уничтожить, - файл, diff-чанк или построчно, в зависимости от того, насколько глубоко вы раскрываете свои изменения.

Я не уверен, является ли это стандартной функцией hg или нет, вы можете легко проверить, есть ли у вас:

> hg revert --help --verbose | grep -- -interactive
 -i --interactive         interactively select the changes (EXPERIMENTAL)

Просто помните, что помеченные вами изменения (X) будут тем, что сбрасывается с ядра, а не тем, что вы сохраняете.

3 голосов
/ 15 декабря 2010

Окно "Commit" в графическом интерфейсе TortoiseHg имеет вкладку "Hunk Selection", которая позволяет выбирать определенные разделы изменений файла для фиксации.

1 голос
/ 15 декабря 2010

У меня другой ответ на вашу проблему, и та же самая проблема у меня. Это отличный вариант использования для ртутных очередей !

Когда я собираюсь начать добавлять код отладки к изменению, которое я считаю готовым, я делаю следующее:

hg qnew -m "fix for bug #123" fix.patch  # basically a local-only commit
hg qnew -m "debugging" dbg.patch         # prepare the next changeset at the tip
[add my debugging]
hg qrefresh                              # update the changeset at the tip
[...]
hg qpop                                  # pop the debugging off the repo history

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

Кроме того, проверьте расширение чердака Билла Барри. На этой странице рассказывается о том, как использовать его для нескольких различных рабочих процессов и как это сравнить с использованием mq. https://www.mercurial -scm.org / вики / AtticExtension

0 голосов
/ 07 марта 2017

Если коммит, в который вы хотите внести изменения, например, ba1c841aaff4, проще всего использовать:

hg meld -r ba1c841aaff4^ <filename>

Теперь нажмите на стрелку вправо (указывающую вправо) в середине, чтобы отменить ваши строки, сохранить файл и закрыть соединение. kdiff3 (старый и не интуитивный) может быть альтернативой.

Примечание: для использования комбинации необходимо настроить ее в нашем файле ~ / .hgrc:

[extdiff]
cmd.meld =

[merge-tools]
meld.args=$base $local $other
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...