Chociaż Mercurial nie zapewnia łatwej alternatywy i odstaje od idei zmiennej historii, istnieje kilka sposobów na osiągnięcie czegoś bliskiego. W tym poście opiszę kilka z nich.
Hg wycofywania
Jeśli konkretnie chce cofnąć ostatni popełnić, można użyć:
hg rollback
który cofnie commit (co nie dotykać drzewa pracę - powinieneś być w stanie podążać za nim za pomocą hg revert --all
lub hg update -C
, jeśli chcesz zresetować cały katalog roboczy).
hg clone -r
Załóżmy, że chcesz przywrócić repozytorium o nazwie giraffe
korekcie 77182fb7451f. Jeśli cd
do katalogu nadrzędnego i uruchom:
hg clone -r 77182fb7451f giraffe new-giraffe
cp giraffe/.hg/hgrc new-giraffe/.hg/
Pokochasz więc skończyć z nowym-żyrafa, repozytorium w wersji 77182fb7451f. (The cp
jest konieczne w celu zapewnienia, że nowe-żyrafa paths
(takie jak „piloty” git jest) poprawnie wskazać repo pochodzenia zamiast do folderu giraffe
jak miałoby to domyślnie.)
To szybciej niż przeklonowano z internetu ponieważ tylko kopiuje pliki lokalnie na twoim dysku (i na wielu systemach, twarde łącza je, aby zaoszczędzić jeszcze więcej czasu i miejsca), ale nadal może być bardzo czasochłonne, jeśli twoje repozytorium jest duże.
pas Hg
Jeśli chcesz zrobić bardziej skomplikowane rzeczy modyfikowanie historii commit (który jest nieco zmarszczył brwi na świecie Hg, przy okazji), najpierw włączyć Mercurial Queues extension dodając następujące linie do swojego .hgrc
(nie ma potrzeby, aby określić ścieżkę po znaku równości):
[extensions]
mq =
To daje (wśród innych przydatnych rzeczy) komenda hg strip
aby całkowicie usunąć changeset i wszystkich jego potomków z repozytorium.W ten sposób można użyć polecenia jak:
hg strip 1cc72d33ea76
jeśli 1cc72d33ea76 jest pierwszym „zły” changeset w repozytorium, które chcesz usunąć.
Niestety, jest to często trudne do usunięcia dokładnie prawo Zestawienia zmian przy użyciu tej metody i to wszystko jest zbyt proste, by skończyć z wieloma głowicami (które można przeglądać za pomocą hg heads
), wymagająca żmudnej wielokrotnego stosowania hg strip
zanim będzie można dostać się do miejsca, gdzie chcesz być bez dodatkowych głów.
pas Hg wykorzystujące revsets
Korzystanie hg revsets można usunąć wszystkich przodków .
(w aktualnej wersji), które są nie przodkowie rewizji, którą chcesz przywrócić, używając polecenia jak:
hg strip "ancestors(.) and not ancestors(77182fb7451f)"
Upewnij się do pierwszego biegu:
hg log -r "ancestors(.) and not ancestors(77182fb7451f)"
który pokaże al l zestawy zmian, które usunęłyby hg strip
, abyś mógł się upewnić, że nie wyrządzisz nieodwracalnej szkody w historii commitowania (ponieważ masz kopie zapasowe ... prawda?).
Tak więc, w hg, ekwiwalent kasowania/resetowania jest czymś więcej niż tylko zmianą tego, na co wskazuje znacznik gałęzi, czy jest obecna jakaś zmieniona wersja bazy danych? – jthill