HG: сопоставить наборы изменений удаленного репо - PullRequest
1 голос
/ 02 сентября 2011

Я перехожу в HG из Git и испытываю трудности с некоторыми ограничениями, которые накладывает на меня HG:

Я нахожусь в ситуации, когда у меня есть некоторые ошибочные коммиты, которые я хочу отбросить,На самом деле, было бы очень хорошо, если бы я мог просто сопоставить историю удаленного репо.

С git это было просто, как пирог:

git reset --hard origin/branch_name

Но как я могу это сделать с Mercurial??Из того, что я слышал, перемещение «подсказки» может непреднамеренно породить анонимные ветви, если вы не знаете, что делаете, что сильно отличается от того, как git выполняет ту же операцию.

Ответы [ 4 ]

4 голосов
/ 03 сентября 2011

Простое решение, которое часто упускают из виду для удаления нежелательных коммитов, - просто клонировать их:

hg clone origin new_clone
rm -rf repo_with_unwanted_commits

Теперь new_clone возвращает вас к подсказке удаленного репо.Если у вас есть другие коммиты в вашем клоне, которые вы еще не вытолкнули, но все еще хотите, вы можете клонировать локально:

hg clone -r tip_you_want repo_with_unwanted_commits new_clone
rm -rf repo_with_unwanted_commits

Теперь new_clone содержит все докоммиты, которые вы хотели, но исключая те, которые вы хотели уничтожить.В этом случае вам просто нужно настроить [paths] в new_clone в hgrc, чтобы он указывал на исходный репозиторий, и вы вернулись к тому, с чего начали.

Это просто и не требует расширений,но обратите внимание, что предложение manojlds об использовании hg strip будет быстрее, и вы сможете сохранить все неотслеживаемые файлы, которые вам могут понадобиться.В любом случае это будет работать только в том случае, если вы еще не добавили наборы изменений, которые хотите удалить.Если вы уже нажали, ваш единственный безопасный вариант - hg backout.

2 голосов
/ 02 сентября 2011

«Эквивалент» для того, что вы хотите, hg strip из расширения MQ, которое вы можете использовать, чтобы «сдуть» ваши коммиты.

https://www.mercurial -scm.org / вики / StripExtension

Еще один «эквивалент»:

hg update --clean

С опцией -C / - clean, незафиксированные изменения отбрасываются, а рабочий каталог обновлен до запрошенной ревизии.

http://www.selenic.com/mercurial/hg.1.html#update

1 голос
/ 05 сентября 2011

В Mercurial 1.8 и более поздних версиях вы можете включить стандартное расширение полосы и сделать

hg strip "outgoing()"

При этом будет использоваться revset , чтобы выбрать ревизии для удаления, а именно дополнительные ревизии, которых еще нет в удаленном репозитории по умолчанию.

1 голос
/ 02 сентября 2011

Mercurial для пользователей Git имеет таблицу эквивалентности команд:

сброс git --hard == hg revert -a --no-backup

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