Могут ли изменения, сделанные полосой, отражаться в публичном репо?

Скажем, у меня есть это:

hg clone public_repo my_repo
touch a b c d
hg add .
hg commit -m a a
hg commit -m b b
hg commit -m c c
hg commit -m d d
hg push
# let say revX is the revision that added a 
hg strip revX

В моей истории репозитория коммиты исчезли. Однако, если я попытаюсь сделать толчок после полосы, он сообщает мне no changes found. Может ли полоса применяться к публичному репо?

EDIT: вопрос просто гипотетический:). Я не в такой ситуации, я просто подумал, что было бы интересно узнать, как это работает.

Ответ 1

Это невозможно. Вам также нужно снять публичное репо.

hg strip просто снимает набор изменений. Он не выполняет операцию "добавления", которая может быть нажата.

В точном примере, который вы предоставляете, вы могли бы просто hg rollback публичного репо.

Ответ 2

Вам нужно запустить hg strip. Если это битбакет репо, вы можете сделать это с панели администратора. Если нет, SSH.

Ответ 3

Позвольте мне притвориться, что вы задаете несколько другой вопрос: Я лишил часть истории моего репозитория, как мне распространить это изменение на другие репозитории dev?

Mercurial не предлагает способ распространения десорбирования таким же образом, как он распространяет добавление наборов изменений. Поэтому вы должны придумать свой собственный путь.

У Bitbucket, например, есть список обновлений (на странице сводки репо, если моя память мне хорошо помогает). Если вы делаете полосу, Bitbucket отображает там что-то вроде этого:

Изменений 12345abcdef был удален из хранилища, запустите hg strip 12345abcdef локально.

Когда нам пришлось распространять зачистку части старой ветки в нашем магазине, вот что мы сделали:

  • Разделил изменения на сервере.
  • Создал пакетный файл с именем strip.bat в ветке default репо, содержащий команду, которую мы запускали на сервере, т.е. hg strip 1234567890.
  • Сказал всем, что, когда они не могут нажать, потому что "push создает новые удаленные головки" без видимых причин, это означает, что они должны запускать strip.bat.

Если нам когда-нибудь понадобится что-то удалить, мы добавим еще hg strip в пакетный файл.

P.S. Да, лучше не снимать, например. используйте резервную копию для фиксации инверсных наборов изменений. Иногда это не вариант: если вы ошибочно объединили ветвь a в ветвь b, когда вы захотите объединить b в a, вы попали в ловушку, Даже если вы отмените набор изменений слияния на feature, объединенные изменения с a уже отмечены как объединенные, и вам будет сложно выполнить другое слияние этих ветвей.

Ответ 4

Правильный и безопасный способ удаления нежелательных изменений, внесенных в дикую природу, - hg backout.