Як відмовитися від злиття hg?


131

Я новачок співпрацювати з Mercurial. Моя ситуація:

  • Ще один програміст змінив версію 1 файлу, щоб замінити 4-пробільні відступи на 2-пробільні відступи. (Тобто змінив кожен рядок.) Зателефонуйте, що rev 2, натиснув на віддалений репо.
  • Я здійснив істотні зміни rev 1 з різними змінами коду в моєму локальному робочому просторі. Закличте цей rev 3.
  • Я hg pullредагував і hg mergeне мав чіткого уявлення про те, що відбувається.
  • Конфлікти безліч і не дуже суттєві.

Тому я дуже хотів би змінити місцеве репо на 2-пробільні відступи перед об'єднанням; тоді злиття буде тривіальним (я гадаю). Але я не можу зробити резервну копію. Я думаю, що мені потрібно, hg update -r 3але це говорить abort: outstanding uncommitted merges.

Як я можу скасувати злиття, зміни інтервалів у місцевому репо-репортажі та перезавантаження?

Відповіді:


126

Ви можете відхилити незапропоновані зміни прапором -C (або --clean):

hg update -C -r 3

ПОПЕРЕДЖАЙТЕ: Все, що не було вчинено, зникне!

Після цього вам, мабуть, слід скористатись якимось інструментом форматування коду, щоб виконати всю операцію, або хоча б дещо знайти та замінити регулярними виразами. Щось таке просте, як заміна того, що збіги ^____(використовуйте 4 пробіли замість підкреслення) на __(2 пробіли), повторені кілька разів (якщо ви не маєте шаленого вкладеного коду).


О, дякую. Ви, мабуть, відповіли правильно, коли я сам це зрозумів. Я в emacs, тому M-x indent-regionзробив і реіндент-трюк.
Grumdrig

6
Варто зазначити, що відслідковувані файли не будуть видалені.
djsutho

132

BTW: якщо ви просто скасуєте злиття, яке ви зробили, а 3 - не ваш номер редагування, ви можете це зробити:

hg update -C -r .

24
Для тих, хто, як я, спочатку не зрозумів, як це працює: крапка .- це ярлик до попередньої редакції.
Jeroen Wiert Pluimers

1
чудова відповідь! має бути найкращим
Олег Абражаєв

1
@Thymine: Від hg help updateя отримую: Якщо не вказано ревізії, оновлення до кінчика поточного імені гілки ... і наконечник не завжди може бути ваша поточна версія ви працюєте. Я цього не тестував, поки що ..
математика

1
Ах, це гарна деталь, щоб знати ... насправді я видаляю свій коментар із твердженням, що відхід -r .- це те саме
Тимін

Просто і дуже корисно.
Naveen Kumar V

33

Щоб скасувати нездійснене злиття, використовуйте

hg update --clean

який перевірить чисту копію вихідного злиття, втративши всі зміни.


2

Мені, мабуть, просто потрібно було hg update -C -r 3, що перезаписує мої локальні файли з врахуванням обертів (що я вважав, що hg updateце зробить, але я помилявся.) Дякую за допомогу!


2
Додавання -Cабо --cleanте, як ви скажете Mercurial йти вперед, навіть коли він викине деякі змінені файли. Ви маєте рацію, що hg update -r Xзазвичай переведе вас на перегляд X, але коли ви злилися, вам потрібно наполягати ще трохи :-)
Мартін Гейслер

7
Я думаю, що "повернення hg - всі - скасувати" було б набагато інтуїтивнішим.
Warren P
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.