Как удалить коммит в Mercurial?
Я хочу полностью удалить коммит Mercurial, как будто он никогда не был введен в репозиторий, и вернуться к моему предыдущему коммиту.
Это возможно?
9 ответов
Если это был ваш последний коммит и вы нигде не нажимали его, вы можете сделать это с rollback
, В противном случае нет. На самом деле, нет. Время менять свои пароли.
Изменить: было отмечено, что вы можете клонировать из более ранней ревизии и объединить изменения, которые вы хотите сохранить. Это также верно, если вы не выдвинули его в репо, который вы не контролируете. После того, как вы нажмете, ваши данные, скорее всего, будет очень трудно вернуть.
Вы можете попытаться удалить mq информацию о вашем коммите.
- Для этого вам нужно зайти Файл-> Настройки-> Расширения.
- Там проверь mq и перезагрузи графический интерфейс.
- После этого просто щелкните правой кнопкой мыши на ненужном коммите и ModifyHistory->Strip
Для редактирования истории я бы использовал расширение Histedit.
hg histedit 45:c3a3a271d11c
Однако имейте в виду, что это имеет смысл только в ситуации, когда вы еще не отправили коммиты в публичный репозиторий, у вас есть общедоступный репозиторий и / или вы можете отчитаться за все клоны. Если вы получили следующую ошибку:
abort: can't rebase immutable changeset 43ab8134e7af
Это означает, что Mecurial считает, что это общедоступный набор изменений (см. Этапы), который уже выдвинут - вы можете заставить его быть draft
снова делаем:
hg phase -f -d 45:c3a3a271d11c
Я сталкиваюсь с этим довольно часто. Я делаю коммит, а затем тяну, чтобы нажать. Но потом приходит что-то, что делает мой недавно сделанный коммит ненужным. Равнина hg rollback
недостаточно, потому что это только отменяет тягу...
Это то, что нужно сделать:
hg strip <rev>
Вещи безболезненны, когда вы никуда не толкаете свои ревизии.
Если это более одного коммита и / или вы уже отправили его куда-то еще, вы можете клонировать свой репозиторий и указать последний набор изменений, который должен быть клонирован.
Смотрите мой ответ здесь, как это сделать:
Mercurial: исправление поврежденной истории
Если вы зафиксировали только локально и не выполняли push, вы можете просто создать клон локально (как описано в моей ссылке), и все готово.
Если вы уже отправили в какой-либо удаленный репозиторий, вам придется заменить его своим клоном.
Конечно, это зависит от того, можете ли вы (или можете) сделать это.
Вы можете использовать "hg backout", чтобы сделать обратное слияние в принципе. Все варианты обсуждаются в свободно доступной книге "Mercurial: полное руководство":
http://hgbook.red-bean.com/read/finding-and-fixing-mistakes.html
Если вы используете черепаху, вы можете использовать изменить историю> полосы...
В 2022 году я используюevolve
расширение. Это одно из лучших расширений для этой цели.
Кprune
нежелательный набор изменений, если вы, например, сделали быстрый взлом, чтобы заставить код работать:
$ echo 'debug hack' >> file1.c
$ hg commit -m 'debug hack'
Теперь у вас есть правильный патч, который вы можете сделатьhg prune .
:
$ hg prune .
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
working directory is now at 2a39221aaebb
1 changesets pruned
Если вы отправите изменение в удаленный репозиторий, вы найдете толькоobsolescence
маркеры:
$ hg push
searching for changes
no changes found
remote: 1 new obsolescence markers
Чтобы проверить изменения в вашем локальном репо, вы можетеpull
из удаленного:
$ hg pull
pulling from ssh://userid@server/repo
searching for changes
no changes found
Да. Если я не ошибаюсь, с v2.3 (отн. 2012/08/01) вы можете использовать HisteditExtension сdrop
Команда для удаления коммита, наряду с strip
или же backout
удалить изменения.
Простой поиск Google по этой функции: https://www.google.com/webhp