Есть коммит, который просто не работает, поэтому я хочу отказаться от него, не удаляя его из истории .
Я обновился с более ранней ревизии и зафиксировал, создав тем самым новую голову.
У меня нет веток, я не хочу веток, я просто хочу продолжать с новой головой точно так, как она есть, ничего особенного, без слияния, без забот, просто продолжайте забывать предыдущую.
Кажется, я не могу найти, как это сделать, и начинаю верить, что это невозможно. Все, что я нахожу, это что-то о ветвях или о слиянии.
Ответы:
Обновите свой репозиторий до заголовка с ревизией, о которой вы хотите забыть, затем используйте,
hg commit --close-branch
чтобы пометить эту (анонимную) ветвь как закрытую. Затем обновиться до руководителя филиала , что вы действительно хотите, и продолжать работать.Вы по-прежнему можете видеть закрытую ветвь, если используете
-c
опцию tohg heads
, но она не будет отображаться по умолчанию и неhg merge
будет пытаться объединиться с закрытой головкой.Вам нужно будет использовать
hg push --force
первый раз, когда вы перемещаете эту закрытую головку в другой репозиторий, так как вы фактически создаете дополнительные головки в удаленном репозитории при нажатии. Так что скажите Mercurial, что это нормально--force
. Людей, которые тянут закрытую голову, не будут беспокоить никакие предупреждения.источник
hg heads
... Я использую Mercurial 1.4.3, это более новая функция?hg branches
все равно должно отображаться название ветки, в которой вы находитесь. Вместо того, чтобы пытаться закрыть ветку, объедините вашу анонимную ветку с исходной веткой, отбросив все изменения.Я знаю, что вы не хотите работать с ветками на данном этапе, но это именно то, что вы сделали. Когда вы вернулись к более ранней версии и зафиксировали что-то работающее, вы создали ветку - безымянную ветку, но ветку все равно.
Нет проблем с тем, чтобы вести себя так же, как вы, и не беспокоиться о наличии нескольких головок, но если вы хотите привести в порядок вещи, чтобы случайно не выбрать неправильную головку, вы можете убить старую ветку.
В документации Mercurial есть хороший раздел, в котором рассказывается о различных возможностях, связанных с обрезкой мертвых веток .
Я думаю, что лучший вариант для вас - пометить старую ветку как "закрытую". Если ваша старая голова - ревизия "123", тогда:
источник
-C
вhg update
? Казалось бы, ни один файл не был бы изменен, поэтому он должен работать без него.Прежде всего, введите:
Представьте, у вас есть три головы в списке:
Допустим, вы хотите сохранить активную последнюю голову (223) и закрыть остальные.
Затем вы должны сделать следующее:
Закрыть голову № 59
Закрыть голову # 123
Зафиксируйте изменения
Не забудьте переключиться на правую голову в конце
И вы сделали.
источник
--close-branch -m "Closing branch - technique #2 abandoned in favor of technique #3"
.hg up -r 223
прежде чем вносить какие-либо изменения.hg push --force
не простоhg push
пройти мимо предупреждения о толкании нескольких голов.hg push
само по себе не работает для меня. Как вы рекомендуете вносить изменения во внешний репо, если он отказывается из-за нескольких голов?Вы хотите использовать
hg backout
. Это удаляет изменения, сделанные набором изменений, из любого дочернего набора изменений.Проверьте это для хорошего объяснения. Mercurial Backout
источник
Ответы Найла и Ника прямо. Поскольку я обнаружил, что создаю множество свисающих голов, я написал псевдоним, чтобы легче закрывать головы. Добавив это к вашему
.hgrc
:(если у вас уже есть
[alias]
раздел, вы можете добавить к нему вместо)Теперь вы можете закрыть заголовок одной командой (без необходимости вручную обновлять другой набор изменений) следующим образом:
Примечание: псевдоним использует тот факт, что псевдонимы Mercurial могут быть командами оболочки . Это означает, что это, вероятно, будет работать только в UNIX, а не в Windows.
источник
Альтернативой закрытию или удалению нежелательной ветви было бы объединить ее таким образом, чтобы полностью отбросить ее последствия, но оставить ее в истории. Этот подход позволит распространять эти нежелательные изменения одним нажатием - поэтому используйте его только в том случае, если это намеченный эффект.
Допустим, история изменений выглядит так:
и это,
5
и6
которые больше не нужны.Ты можешь сделать это:
который создаст это:
Обновление
8
гарантирует, что вы работаете над желаемой головой в истории, которую вы хотите сохранить.В
-t :local
инструктирует ¯hG использовать Объединить «инструмент» под названием местный , который говорит ему , чтобы игнорировать изменения из другой ветви, т.е. не представленного текущего состояния рабочей папки. Более подробная информация .Таким образом, нежелательные изменения
5
и6
сохраняются в истории, но не влияют ни на что более недавнее.источник
Это пример использования расширения Evolve . В настоящее время он не входит в комплект Mercurial, поэтому технически это расширение стороннего производителя. Но он довольно активно используется группой людей, включая разработчиков Mercurial, очень активно разрабатывается и никуда не денется.
С расширением Evolve вы просто делаете
и продолжить свою жизнь. Cset все еще будет там, но устарел. Он не будет виден, если вы не передадите эту
--hidden
опцию командам Mercurial, и по умолчанию не будет передан в удаленные репозитории. Хотя я думаю, что вы можете заставить это, если вы действительно хотите.Если cset, который вы обрезаете, имеет предков, которых вы хотите сохранить, то вам придется запустить,
hg evolve
чтобы перебазировать эти наборы изменений.hg evolve
сделает это автоматически. В противном случае вам не нужно ничего делать.источник
Вы можете клонировать ваш поврежденный репо на новый без клонирования этой нежелательной головы. Затем удалите старый репозиторий, переместите только что созданный клон в исходное место и продолжите работу с ним. Это займет некоторое время, но вы получите совершенно чистый репозиторий без признаков этой нежелательной ревизии.
источник
Я сталкивался с этой проблемой много раз, когда хочу обезглавить голову, созданную по ошибке. Я всегда хочу, чтобы это исчезло с лица Земли.
На вашей локальной копии, получите последнюю версию и затем:
Найдите начало головы, которую вы хотите раздеть (где новая ветвь начинает разветвляться), получите номер ревизии
Сними это.
Источник: TipsAndTricks .
Источник: PruningDeadBranches # Using_strip .
У вашего репо теперь должна быть снята голова. Последний шаг важен, поскольку удаление не создает никаких изменений, которые вы можете перенести в ваш центральный репозиторий. Без последнего шага вы только обнажили голову локально.
источник