Пока нет собственно вопрос в вашем вопросе, я предполагаю, что эти двое:
Почему существуют две головы?
Как изменить ситуацию так, чтобы была только одна голова?
Ответ на 1) прост: вы опубликовали свой набор изменений. Ваш репозиторий bitbucket настроен как репозиторий публикации (это по умолчанию), поэтому все нажатые там наборы изменений становятся немыслимыми, таким образом, публичная фаза, как в репозитории bitbucket, так и в вашем локальном. Вы не можете изменить любой набор изменений, который уже помещен в этот репозиторий. Использование hg push --force
только гарантировало, что вы на самом деле может подтолкнуть новые головы к репо и что вы охотно сказали «до свидания» к предупреждению, которое вы обычно получаете, когда пытаетесь подтолкнуть новые головы. Используя mercurial, команда push является строго append-only (просто в отличие от git, где это может быть дорога к работе по восстановлению лота при принуждении к неправильной фиксации).
Ответ на вопрос 2) теперь сложнее и есть несколько вариантов. Вероятно, проще всего использовать интерфейс bitbucket и убрать все изменения, которые вы нажали в последний коммит, и, кроме того, тот, который вы пытались изменить. Затем повторите попытку. Это должно исправить это сейчас.
Я не уверен на 100% в отношении текущих возможностей битбакет. Я слышал, что это (все же) не поддерживает обмен марками устаревания, поэтому этой ситуации очень трудно избежать. Однако он позволяет устанавливать хранилище для публикации и поддерживать фазы. Таким образом, если ваша фаза по умолчанию также является сквозной, фазы не будут изменены при нажатии. И либо вы избегаете внесения изменений в уже внесенные изменения. Или вы изменяете и закрываете теперь устаревшую голову с исходным changeetID - тогда ее, по крайней мере, больше не показывать в битбакете.