Jak zrezygnować z scalania HG?

131

Jestem nowy we współpracy z Mercurial. Moja sytuacja:

  • Inny programista zmienił rewizję 1 pliku, aby zastąpić wcięcia 4-spacji wcięciem 2-spacjami. (Tzn. Zmieniłem każdą linię.) Wywołaj to rev 2, zepchnij do zdalnego repozytorium.
  • Wprowadziłem istotne zmiany w wersji 1, wprowadzając różne zmiany kodu w moim lokalnym obszarze roboczym. Nazwij to rev 3.
  • Mam hg pulled i hg merged bez jasnego pojęcia, co się dzieje.
  • Konflikty są niezliczone i mało istotne.

Więc naprawdę żałuję, że nie zmieniłem lokalnego repozytorium na wcięcia o 2 spacjach przed scaleniem; wtedy scalenie będzie trywialne (przypuszczam). Ale nie mogę się cofnąć. Myślę, że muszę, hg update -r 3ale jest napisaneabort: outstanding uncommitted merges .

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

Grumdrig
źródło

Odpowiedzi:

128

Możesz odrzucić niezatwierdzone zmiany za pomocą flagi -C (lub --clean):

hg update -C -r 3

UWAGA: wszystko, co nie zostało popełnione, zniknie!

Następnie prawdopodobnie powinieneś użyć jakiegoś narzędzia do formatowania kodu, aby wykonać całą operację lub przynajmniej znaleźć i zastąpić wyrażeniami regularnymi. Coś tak prostego, jak zastąpienie tego, co pasuje ^____(użyj 4 spacji zamiast podkreślenia), __(2 spacje), powtórzone kilka razy (chyba że masz niesamowicie zagnieżdżony kod) powinno działać.

R. Martinho Fernandes
źródło
Oh dziękuję. Musiałeś dobrze odpowiedzieć, kiedy sam to rozgryzłem. Jestem w M-x indent-regionemacsie , podobnie jak sztuczka z reindentem.
Grumdrig
6
Warto zauważyć, że nieśledzone pliki nie zostaną usunięte.
djsutho,
134

BTW: jeśli po prostu cofniesz scalenie, które zrobiłeś, a 3 nie jest Twoim numerem wersji, możesz to zrobić:

hg update -C -r .
matematyka
źródło
25
Dla każdego takiego jak ja, który na początku nie rozumiał, jak to działa: kropka .to skrót do poprzedniej wersji.
Jeroen Wiert Pluimers
1
świetna odpowiedź! powinno być najlepiej
Oleg Abrazhaev
1
@Thymine: From hg help updateI get: Jeśli nie określono żadnego zestawu zmian, zaktualizuj końcówkę bieżącej nazwanej gałęzi ... a wskazówka może nie zawsze być twoją bieżącą wersją, nad którą pracujesz. Jak dotąd nie testowałem ...
matematyka
1
Ach, to dobry szczegół, aby wiedzieć ... tak naprawdę zamierzam usunąć swój komentarz, twierdząc, że opuszczenie -r .jest takie samo
Thymine
Proste i bardzo pomocne.
Naveen Kumar V
35

Aby cofnąć niezatwierdzone scalanie, użyj

hg update --clean

który wypisze czystą kopię oryginalnego elementu macierzystego scalania, tracąc wszystkie zmiany.

Tao
źródło
2

Najwyraźniej po prostu musiałem to zrobić hg update -C -r 3, co nadpisuje moje lokalne pliki z myślą o rev (i myślałem, hg updateże tak się stanie; ale się myliłem). Dziękuję za pomoc!

Grumdrig
źródło
2
Dodanie -Club --cleanjest sposobem, w jaki mówisz Mercurialowi, aby kontynuował, nawet jeśli wyrzuci niektóre zmodyfikowane pliki. Masz rację, hg update -r Xco zwykle prowadzi do wersji X, ale kiedy jesteś w scalaniu, musisz nalegać trochę więcej :-)
Martin Geisler
7
Myślę, że "hg revert --all --cancelmerge" byłoby dużo bardziej intuicyjne.
Warren P