2010-04-03 26 views
95

Jestem nowy we współpracy z Mercurial. Moja sytuacja:Jak zrezygnować z połączenia hg?

  • Inny programista zmienił rev 1 pliku, aby zamienić wcięcia 4-spacji na wcięcie 2-spacji. (Tj. Zmieniła każdą linię). Wywołaj ten rev 2, wciśnięty do zdalnego repo.
  • Wprowadziłem zmiany merytoryczne rev 1 z różnymi zmianami kodu w moim lokalnym obszarze roboczym. Zadzwoń, że rev 3.
  • I have hg pull ed i hg merge d bez jasnego pojęcia, co się dzieje.
  • Konflikty są miriady i nie są tak naprawdę istotne.

Naprawdę chciałbym zmienić moje lokalne repo na wcięcia 2-spacji przed scaleniem; to połączenie będzie trywialne (przypuszczam). Ale nie mogę się cofnąć. Myślę, że muszę hg update -r 3, ale mówi abort: outstanding uncommitted merges.

Jak mogę cofnąć scalenie, zmienić odstępy w moim lokalnym repozytorium i wycofać?

Odpowiedz

97

można wyrzucić niezatwierdzone zmiany z -C (lub) Flaga --clean:

hg update -C -r 3 

UWAGA: Wszystko, co nie zostało popełnione już nie będzie!

Po tym należy prawdopodobnie użyć jakiegoś narzędzia do formatowania kodu, aby wykonać całą operację, lub przynajmniej niektóre znaleźć i zastąpić wyrażeń regularnych. Coś tak prostego, jak zastąpienie tego, co pasuje ^____ (użyj 4 spacji zamiast podkreśleń) z __ (2 spacje), powtórzone kilka razy (chyba że masz obłędnie jakiś zagnieżdżony kod) powinno działać.

+0

Och - dzięki. Musiałeś odpowiedzieć na to pytanie, kiedy sam to wymyśliłem. Jestem w emacs, więc "Ment x-region" zrobił trik reindentu. – Grumdrig

+4

Warto zauważyć, że pliki nieśledzone nie zostaną usunięte. – djsutho

1

Najprawdopodobniej potrzebowałem tylko hg update -C -r 3, który nadpisuje moje lokalne pliki z myślą o rev (to jest to, co myślałem, że zrobi hg update, ale myliłem się.) Dzięki za moją pomoc!

+2

Dodanie '-C' lub' --clean' to sposób, w jaki Mercurial mówi, aby iść naprzód, nawet jeśli wyrzuci niektóre zmodyfikowane pliki. Masz rację, że 'hg update -r X' zwykle przenosi cię do wersji X, ale kiedy jesteś w trakcie scalania, musisz nalegać nieco więcej :-) –

+7

Myślę, że" hg revert --all --cancelmerge "byłoby znacznie bardziej intuicyjne. –

98

BTW: jeśli po prostu przywrócić scalenia gałęzi i 3 nie jest twój numer wersji można to zrobić:

hg update -C -r . 
+16

Dla każdego takiego jak ja, który na początku nie wiedział, jak to działa: kropka '.' jest skrótem do poprzedniej wersji. –

+1

świetna odpowiedź! powinien być najlepszy –

+1

@Thymine: Z 'hg help update' otrzymuję: * Jeśli nie podano żadnego zestawu zmian, aktualizacja do końcówki bieżącego nazwanego oddziału ... * i wskazówka może nie zawsze być twoją bieżącą wersją, nad którą pracujesz. Nie przetestowałem go, jak dotąd .. – math

17

Aby cofnąć niezakończonej seryjnej, użyj

hg update --clean 

który sprawdzi się czystą kopię oryginalnego scalania rodzica, tracąc wszystkie zmiany.