Używam Mercurial i wpadłem w straszny bałagan lokalnie, z trzema głowami. Nie mogę naciskać i chcę po prostu usunąć wszystkie lokalne zmiany i zatwierdzenia i zacząć od nowa z całkowicie czystym kodem i czystą historią.
Innymi słowy, chcę skończyć z (a) dokładnie tym samym kodem lokalnie, jaki istnieje na końcu zdalnej gałęzi i (b) bez historii jakichkolwiek lokalnych zatwierdzeń.
Wiem, że hg update -C
nadpisuje wszelkie lokalne zmiany. Ale jak usunąć lokalne zatwierdzenia?
Żeby było jasne, nie interesuje mnie zachowanie żadnej pracy, którą wykonałem lokalnie. Chcę tylko najprostszego sposobu na powrót do całkowicie czystego, lokalnego kasy.
version-control
mercurial
dvcs
head
Richard
źródło
źródło
Odpowiedzi:
Kiedy najprostszy sposób (nowy
hg clone
) nie jest praktyczny, używamhg strip
:Powtarzaj, aż
hg outgoing
pozostanie cicho. Zauważ, żehg strip $rev
unicestwia$rev
i wszystkich jego potomków.Pamiętaj, że może być konieczne włączenie najpierw
strip
w ustawieniach Mercurial .PS: jeszcze mądrzejszym podejściem jest użycie języka revset i wykonanie:
źródło
hg strip 'roots(outgoing())'
do pracy z powodu jej nierozpoznania'roots(outgoing())'
. Udało mi się to wykorzystaćhg strip "roots(outgoing())"
.cmd.exe
, tak.Będziesz chciał utworzyć lokalny klon, w którym zachowasz tylko zestawy zmian, które są również obecne w zdalnym repozytorium. Zastosowanie TortoiseHg ,
hg log
lub podobna, aby dowiedzieć się, które z wersjami Ostatnia wersja jest taka, że ty nie zrobić (jeden przed bałagan uruchomiony). Użyciehg outgoing
może tutaj pomóc - wyświetli listę wszystkich wprowadzonych zestawów zmian - wybierz numer wersji wcześniejszy niż którykolwiek z nich.Jeśli wywoływana jest wersja docelowa
good
i wywoływany jest twój klonfoo
, wykonaj:Będzie to szybka, lokalna operacja - nie ma powodu, aby pobierać wszystko od nowa .
foo-clean
Klon będzie zawierać tylko Zestawienia zmian do rewizjigood
. Teraz można zastąpićfoo-clean/.hg/hgrc
zfoo/.hg/hgrc
aby zachować swoje ustawienia repozytorium lokalne takie jak ścieżka domyślna Push / przeciwsobnym.Kiedy upewnisz się, że
foo-clean
masz wszystko, czego potrzebujeszfoo
, po prostu usuńfoo
i zmień nazwęfoo-clean
nafoo
. Wykonaj a,hg pull
aby pobrać nowe zestawy zmian ze zdalnego repozytorium do swojego klonu i kontynuuj normalnie.Jeśli nikt nie wypchnął nowych zestawów zmian do zdalnego repozytorium, bardzo łatwo jest określić, której wersji chcesz użyć, jak
good
powyżej:hg id default
poda identyfikator wskazówki w zdalnym repozytorium.źródło
hg pull -r
wykonanie ostatniej „dobrej” wersji każdej dodatkowej gałęzi.Dobrze. Po prostu usuń wszystkie lokalne rzeczy,
hg init
nowe lokalne repozytorium ihg pull
najnowszą wskazówkę, którą masz. Nie zapomnij ohg update
tym po tym.źródło
hg init
+hg pull
=hg clone
Różnica polega na tym, żehg clone
tworzy ładny.hg/hgrc
plik dla Ciebie ihg clone
używa twardych linków, aby zaoszczędzić miejsce podczas klonowania na tym samym systemie plików.hg help init
jest tutaj: selenic.com/mercurial/hg.1.html#init Ale może to jest zbyt lakoniczne? Jeśli potrzebujesz dodatkowej pomocy, wyślij wiadomość e-mail na naszą listę mailingową! Zobacz: mercurial.selenic.com/wiki/MailingListsMożesz użyć
zabić dowolną wersję i jej poddrzewo w lokalnym repozytorium.
https://www.mercurial-scm.org/wiki/Strip
Ale nie próbuj go używać do niczego, co już zostało wypchnięte.
źródło
Po prostu usuń wszystko, co masz w systemie lokalnym i ponownie sklonuj zdalne repozytorium.
źródło
załatwia sprawę dla mnie.
Usuwa wszystkie wersje, które nie zostały przeniesione do domyślnego repozytorium, które są tworzone z nazwiskiem autora.
Możesz również użyć tego stylu, aby nie sprawdzał się w domyślnym repozytorium, ale w innym repozytorium
źródło
Jeśli używasz TortoiseHg, jednym prostym sposobem na wyjście z (małego) bałaganu jest najpierw zaktualizowanie do najnowszej wersji, a następnie wybranie zestawów zmian i zainicjowanie „scalenia z lokalnymi”. Kiedy pojawi się okno dialogowe scalania, wystarczy kliknąć małą ikonę „+”, aby wyświetlić dodatkowe opcje, z których jedną jest „odrzuć zestawy zmian z wersji docelowej scalania (innej)”. W ten sposób Twoje zestawy zmian będą nadal znajdować się w repozytorium i zostaną wypchnięte, ale nie przyniosą żadnego efektu, ponieważ zostaną odrzucone podczas scalania. Jeśli masz wiele zestawów zmian obejmujących wiele głów, możesz nie chcieć zanieczyszczać repozytorium w ten sposób, ale jest to prosta poprawka i warto rozważyć, czy zestawy zmian, które odrzucasz, zawierają dane, do których możesz później chcieć się odwołać.
źródło