Я использую Mercurial и попал в ужасный локальный беспорядок с тремя головами. Я не могу нажимать, и я просто хочу удалить все свои локальные изменения и коммиты и начать заново с полностью чистым кодом и чистой историей.
Другими словами, я хочу получить (а) точно такой же локальный код, который существует в конце удаленной ветки, и (б) никакой истории каких-либо локальных коммитов.
Знаю, hg update -C
перезаписывает любые локальные изменения. Но как мне удалить любые локальные коммиты?
Чтобы быть ясным, я не заинтересован в сохранении какой-либо работы, которую я сделал на месте. Мне просто нужен самый простой способ вернуться к полностью чистой локальной кассе.
version-control
mercurial
dvcs
head
Ричард
источник
источник
Ответы:
Когда самый простой способ (новый
hg clone
) непрактичен, я используюhg strip
:Повторяйте, пока не
hg outgoing
станет тихо. Обратите внимание, чтоhg strip $rev
стирает$rev
и все его потомки.Обратите внимание, что вам может потребоваться сначала включить
strip
в настройках Mercurial .PS: еще более разумный подход - использовать язык набора изменений и сделать:
источник
hg strip 'roots(outgoing())'
с работой из-за того, что он не узнает'roots(outgoing())'
. Я смог заставить его работатьhg strip "roots(outgoing())"
.cmd.exe
, да.Вы захотите создать локальный клон, в котором вы сохраните только наборы изменений, которые также присутствуют в удаленном репозитории. Использование TortoiseHg ,
hg log
или аналогичный рисунку , какие из ваших изменений является то , что Lastest правка не делать (один перед бардак начался). Здесьhg outgoing
может помочь использование - он перечислит все сделанные вами изменения - выберите номер ревизии раньше, чем любой из них.Если целевая ревизия вызывается
good
и вызывается ваш клонfoo
, выполните:Это будет быстрая локальная операция - нет причин загружать все заново .
foo-clean
Клон будет содержать только до ревизии , пересмотраgood
. Теперь вы можете заменитьfoo-clean/.hg/hgrc
сfoo/.hg/hgrc
тем чтобы сохранить свои хранилища локальной настройки , такие как по умолчанию тяни / толкай путь к.Когда вы будете удовлетворены тем, что
foo-clean
у вас есть все необходимоеfoo
, просто удалитеfoo
и переименуйтеfoo-clean
вfoo
. Сделайте a,hg pull
чтобы получить любые новые ревизии из удаленного репозитория в свой клон, и продолжайте как обычно.Если никто не отправил новые ревизии в удаленный репозиторий, то очень просто определить, какую ревизию вы хотите использовать, как
good
указано выше:hg id default
сообщит вам идентификатор подсказки в удаленном репозитории.источник
hg pull -r
последняя «хорошая» ревизия каждой дополнительной ветки.Хорошо. Так что просто удалите все локальные файлы,
hg init
новый локальный репозиторий иhg pull
последние советы, которые у вас есть. Не забудьтеhg update
после этого.источник
hg init
+hg pull
=hg clone
Разница в том, чтоhg clone
это хороший.hg/hgrc
файл для вас, и в немhg clone
будут использоваться жесткие ссылки для экономии места при клонировании в той же файловой системе.hg help init
здесь: selenic.com/mercurial/hg.1.html#init Но, может быть, это слишком кратко? Если вам нужна дополнительная помощь, отправьте письмо в наш список рассылки! См .: mercurial.selenic.com/wiki/MailingListsВы можете использовать
чтобы убить любую ревизию и ее поддерево в вашем локальном репозитории.
https://www.mercurial-scm.org/wiki/Strip
Но не пытайтесь использовать его для того, что уже было продвинуто.
источник
Просто удалите все, что есть в вашей локальной системе, и повторно клонируйте удаленное репо.
источник
делает фокус для меня.
Он удаляет все ревизии, которые не помещены в репозиторий по умолчанию, созданные с вашим именем автора.
Вы также можете использовать этот стиль, чтобы проверка выполнялась не с репозиторием по умолчанию, а с другим репозиторием.
источник
Если вы используете TortoiseHg, один простой способ выйти из (небольшого) беспорядка - это сначала обновить до последней ревизии, затем выбрать свои наборы изменений и инициировать «слияние с локальным». Когда появится диалог слияния, просто щелкните маленький значок «+», чтобы отобразить некоторые дополнительные параметры, одна из которых - «отменить изменения из целевой (другой) ревизии слияния». Это будет означать, что ваши ревизии все еще будут в репо и будут отправлены, но не будут иметь никакого эффекта, потому что они будут отброшены при слиянии. Если у вас много ревизий, охватывающих множество голов, вы, возможно, не захотите загрязнять репозиторий таким образом, но это простое исправление, и стоит подумать, содержат ли отбрасываемые вами ревизии данные, на которые вы, возможно, позже захотите ссылаться.
источник