2011-01-24 21 views
13

Jeśli wykonasz numer hg pull, a następnie hg update (lub hg merge), czy istnieje sposób, aby go wycofać? Tj .: przywróć swoje repozytorium do stanu sprzed utworzenia hg pull?Jak przywrócić Mercurial hg pull?

Uważam, że można wykonać hg update -r n, w którym należy określić zestaw zmian przed pobraniem jako n. Chociaż zgaduję, to nadal pozostawi zmiany w twoim repozytorium, ale tak naprawdę nie jest to, czego chcemy. ?? Aby cofnąć ostatnią transakcję, można użyć

Odpowiedz

11

hg strip usunie poprawki z repozytorium. Jak wszystkie potężne komendy, to niebezpieczne, więc bądź ostrożny.

https://www.mercurial-scm.org/wiki/StripExtension

zobacz także:

https://www.mercurial-scm.org/wiki/EditingHistory

Jeśli natychmiast złapać swój błąd (lub racjonalnie wkrótce), można po prostu użyć hg taśmy REV aby cofnąć ostatnie (jedna lub więcej) zmian. ...

+1

Wydaje się działać - 'hg strip x' gdzie' x 'to pierwszy zestaw zmian w przeciągu wydaje się robić lewy. Po tym 'hg out' pojawia się pusty, co jest to, co chcemy .. –

+1

Klonowanie repo do mieć kopię zapasową wydaje się być dobrym pomysłem. SourceTree na OSX można Strip, dostęp poprzez kliknięcie prawym przyciskiem myszy wersji. – ftvs

+0

Dlaczego po prostu nie powrócić do żądanego obrotu? Czy to faktycznie zabija historię, a to jest pożądane z jakiegoś powodu? –

2

. Polecenia tego należy jednak używać ostrożnie. Aby uzyskać więcej informacji, patrz here.

+0

W moim przypadku zrobiłem pociągnięcie, scalenie, a następnie zatwierdzenie (scalenia). Wtedy zdałem sobie sprawę, że chcę cofnąć WSZYSTKIE to. 'hg rollback' pozwól mi wycofać się z zatwierdzenia, ale nie widzę sposobu, aby wycofać ciąg .. –

+1

Istnieje jeden poziom historii wycofywania zmian, więc będziemy musieli sprawdzić, czy ktoś inny publikuje inną sugestię. – mikej

0

można:

hg update -C <version> 

zobaczyć Mercurial FAQ.

+1

Wydaje się, że zaktualizuj moje pliki robocze do stanu sprzed pobierania i scalenia. ALE 'hg out' nadal pokazuje zestawy zmian, które usunąłem ... a' hg push' popchnie je do centralnego repozytorium, którego NIE chcę robić. –

0

Jeśli chcesz usunąć wszystkie ślady ciągnąć tworzą swoją historię, to musisz użyć rozszerzenia jako Bert F sugeruje (filozofia w mercurial jest, aby nigdy nie zmieni historię)

jeśli pamiętaj, że historia zawierająca Twój błąd ma dwie nieznacznie różne opcje: hg update -C -r, które utworzą nowy oddział w podanej wersji lub hg revert -r, który pozostanie w tej samej gałęzi, ale utworzy nową niezamierzoną zmianę, która spowoduje cofnięcie wszystkich elementów.

6

OK, nie można wycofać, ponieważ wykonano zatwierdzenie. Możesz użyć "paska hg", który jest częścią mq (po 2.8 paska znajduje się w jego własnym rozszerzeniu), lub użyj mq, aby usunąć zmiany. Tak czy siak, proponuję zrobić wszystko na innym klonie, na wszelki wypadek.

Aby zrobić Strip aktualizację do rewizji, które chcesz zachować, a następnie

hg strip <REV> 

gdzie <REV> to pierwsza rewizja chcesz usunąć. Usunie to jedno i wszystkie spadki (w tym twoje zatwierdzenie scalenia).

alternatywnie można

hg qnew (if you don't already have a patch queue) 
hg qimport <REV> 

które będą importować pojedynczą zmianę w kolejce plastra. Następnie możesz dodać więcej, a następnie użyć komend mq do edycji, zmiany kolejności, usunięcia lub cokolwiek chcesz zrobić z tymi wersjami. qdel usuwa bieżącą poprawkę.


Edytuj: Oczywiście musisz włączyć rozszerzenie MQ dla obu tych opcji, chyba że używasz wersji 2.8 lub nowszej. W tym przypadku pasek jest w przedłużeniu paska, a mq w rozszerzeniu mq. Oba są dostarczane ze standardową instalacją.

Powiązane problemy