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

Допустим, у меня есть это:

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's say revX is the revision that added a 
hg strip revX

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

РЕДАКТИРОВАТЬ: вопрос только гипотетический :). Я не в такой ситуации, я просто подумал, что было бы интересно узнать, как это работает.

Ответы [ 5 ]

10 голосов
/ 09 августа 2011

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

9 голосов
/ 09 августа 2011

Это невозможно.Вы также должны лишить публичного репо.

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

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

7 голосов
/ 10 августа 2011

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

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

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

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

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

  1. Удалили наборы изменений на сервере.
  2. Создали пакетный файл с именем strip.bat на default ветвь репо, содержащая команду, которую мы запускаем на сервере, то есть hg strip 1234567890.
  3. Сказали всем, что когда они не могут толкать, потому что «толчок создает новые удаленные головы» без видимой причины, это означает, чтоони должны запускаться strip.bat.

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

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

2 голосов
/ 09 августа 2011

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

0 голосов
/ 08 марта 2018

Иногда невозможно strip или backout внести изменения, например, если это была ревизия слияния, и у вас нет доступа администратора к серверу. Один из методов, который работает, - это разветвить последнюю хорошую ревизию и затем закрыть дурную голову.

  1. hg up badrev^ (перейти к ревизии раньше плохой)
  2. touch dummy && hg add dummy && hg ci -m 'dummy' && hg rm dummy && hg ci --amend -m 'Fix accidental merge' (Создать вторую голову без изменений из хорошей ревизии)
  3. hg up badrev (перейти к плохой ревизии)
  4. hg ci --close-branch -m 'Close bad head' (Закрыть плохую голову)
  5. hg push
...