Преобразование зафиксированных изменений в незафиксированные изменения в Mercurial - PullRequest
1 голос
/ 18 января 2012

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

РЕДАКТИРОВАТЬ:

Относительно использования hg rollback.

Что делать, если у меня есть незафиксированные изменения, прежде чем я хочу сделать hg rollback?Должен ли я сделать это первым?Как насчет последних нескольких коммитов?Объединяет ли последовательное hg rollback изменения от этих подтверждений к существующим незафиксированным изменениям?

Ответы [ 3 ]

7 голосов
/ 18 января 2012

Если вы пытаетесь повторить последний коммит (возможно, с более совершенным сообщением о фиксации, возможно, с исправленной ошибкой), вам следует использовать

$ hg commit --amend

, чтобы обновить последний коммит.Это намного безопаснее, чем использовать hg rollback, как описано ниже.

Если коммит является последним коммитом и у вас нигде не обновлено , то выможно использовать hg rollback.Пожалуйста, прочитайте hg help rollback - это потенциально разрушительная команда.

Что она делает: hg rollback откатит последнюю транзакцию в вашем хранилище.Каждый раз, когда вы hg commit, hg pull, hg unbundle и т. Д., Вы создаете новую транзакцию.Когда все безопасно хранится, Mercurial закрывает транзакцию.Если что-то пойдет не так в середине транзакции, Mercurial может восстановиться (см. hg recover).Вы также можете вручную откатить последнюю транзакцию с помощью hg rollback.Смотрите hg rollback --dry-run для предварительного просмотра того, что команда сделает.

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

$ hg commit -m "Fixed buug-123"

Упс, опечатка в сообщении коммита!Давайте исправим это:

$ hg rollback
$ hg commit -m "Fixed bug-123"

(используйте hg commit --amend вместо Mercurial 2.2 и более поздних версий.)

Последнее сообщение о фиксации также сохраняется в .hg/last-message.txt, поэтому вы можете восстановить его оттудаесли у вас его нет в истории вашей оболочки.

Что если у меня будут незафиксированные изменения, прежде чем я захочу сделать откат hg?Должен ли я сделать это первым?

Откат не касается рабочей копии.Это означает, что любые дополнительные изменения в рабочей копии будут отображаться вместе с изменениями из набора изменений.Это как если бы вы вообще не вводили hg commit.

А как насчет последних нескольких коммитов?Последовательный откат hg складывает изменения от этих коммитов к существующим незафиксированным изменениям?

Нет, у вас есть один уровень отката , так как мы отслеживаем только последнюю транзакцию.

1 голос
/ 18 января 2012

Любой набор изменений (или набор наборов), более простой, можно преобразовать в локальные изменения с помощью Mercurial Queues (сложить | развернуть набор изменений)

Руководство по TortoiseHG-центрированному (для старого GUI) покажите пошаговые операции

0 голосов
/ 17 сентября 2013

Хотя вам, вероятно, следует использовать hg commit --ammend, когда это возможно, теперь я предпочитаю новую и более мощную функцию редактирования истории mecurial: hg histedit особенно если вы знакомы с git.

Вы можетепосмотрите, какую ревизию вы хотите вернуть, просто выполнив hg out (т.е. вы хотите выбрать ревизию, которая не была передана).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...