Jak mogę cofnąć moją ostatnią przypadkowo zatwierdzoną (nie wprowadzoną) zmianę w Mercurial?
Jeśli to możliwe, preferowany byłby sposób zrobienia tego z TortoiseHg.
Aktualizacja
W moim konkretnym przypadku dokonałem zestawu zmian (nie popchnąłem). Następnie ściągnąłem i zaktualizowałem z serwera. Dzięki tym nowym aktualizacjom zdecydowałem, że moje ostatnie zatwierdzenie jest przestarzałe i nie chcę go synchronizować. Wydaje się więc, że hg rollback
nie jest to dokładnie to, czego szukam, ponieważ wycofałoby pull zamiast mojego zatwierdzenia.
mercurial
tortoisehg
mercurial-commit
Martin Buberl
źródło
źródło
hg rollback
, a potem ponownym pociągnięciem?strip --keep
: stackoverflow.com/questions/29413851/ ... bezpośrednio rozwiązuje zadanie, podobnie jak qimport MQ. Alternatywnie, może być lepiej po prosturebase
w scenariuszu, jeśli lokalne zmiany mają być również zachowane i nie ma konfliktu. (Użyj scalenia, aby zachować pewne połączone zmiany z obu gałęzi, gdy jest to pożądany końcowy cel wykresu, szczególnie w przypadku, gdy nie jest to fastforward.) Może być również poprawne po prostu do zamknięcia gałęzi, która nadal „zachowuje historię” (ale inaczej niż scalanie) w zależności od pożądanego stanu końcowego.hg strip --keep
to polecenie jest używane, ale musisz podać wersję, nphg strip --keep -r .
. : . Ta odpowiedź dobrze wyjaśnia stackoverflow.com/a/19064016/1286571Odpowiedzi:
Byłby jeden sposób
(przestarzałe od Hg2.7, sierpień 2013)hg rollback
Zobacz sekcję Odzyskiwanie TortoiseHg :
W tym wątku opisano również różnicę między
hg rollback
ihg strip
:(napisany przez Martina Geislera, który również współpracuje przy SO)
ForeverWintr sugeruje w komentarzach (w 2016 roku, 5 lat później)
źródło
hg rollback
spowoduje cofnięcie ściągnięcia zamiast zatwierdzenia.hg commit --amend
ma działać, ale dla mnie dał mi to edytor do zmodyfikowania komunikatu o zatwierdzeniu i żadnej metody zmiany dołączonych plików. Wyszedłem z edytora bez zapisywania i stwierdziłem, że moje błędne zatwierdzenie zostało zmienione na WSZYSTKIE zmienione pliki!hg commit --amend
. Możesz „cofnąć zatwierdzenie” plików, najpierw zapisująchg forget
je, np .:hg forget filea; hg commit --amend
, ale wydaje się to nieintuicyjne. hg strip --keep jest prawdopodobnie lepszym rozwiązaniem dla nowoczesnego hg.hg strip
całkowicie usunie wersję (i wszelkie elementy potomne) z repozytorium.Aby użyć stripa, musisz zainstalować MqExtension , dodając następujące wiersze do swojego .hgrc (lub mercurial.ini):
W TortoiseHg polecenie strip jest dostępne w środowisku roboczym. Kliknij wersję prawym przyciskiem myszy i wybierz „Modyfikuj historię” -> „Usuń”.
Ponieważ
strip
zmienia historię repozytorium, powinieneś używać go tylko w przypadku wersji, które nie zostały jeszcze nikomu udostępnione. Jeśli używasz Mercurial 2.1+, możesz śledzić te informacje za pomocą faz . Jeśli zatwierdzenie jest nadal w fazie roboczej, nie zostało udostępnione innym repozytoriom, więc możesz je bezpiecznie usunąć. (Dzięki Zasurus za wskazanie tego).źródło
Ponieważ nie możesz wycofać, powinieneś scalić to zatwierdzenie z nową głową, którą otrzymałeś, kiedy pociągnąłeś. Jeśli nie chcesz żadnej pracy, którą wykonałeś, możesz to łatwo zrobić, korzystając z tej wskazówki .
Więc jeśli wyciągnąłeś i zaktualizowałeś ich głowę, możesz to zrobić:
zachowuje wszystkie zmiany w aktualnie wyewidencjonowanej wersji i żadną ze zmian w niewypisanej wersji (tę, którą napisałeś, że już nie potrzebujesz).
To świetny sposób, aby to zrobić, ponieważ zapewnia dokładność i kompletność historii. Jeśli za 2 lata ktoś znajdzie błąd w tym, co ściągnąłeś, możesz zajrzeć do swojej (nieużywanej, ale zapisanej) implementacji tej samej rzeczy i powiedzieć „och, zrobiłem to dobrze”. :)
źródło
hg rollback
jest tym, czego chcesz.W TortoiseHg
hg rollback
dokonuje się tego w oknie dialogowym zatwierdzenia. Otwórz okno dialogowe zatwierdzenia i wybierz „Cofnij”.źródło
W aktualnej wersji TortoiseHg Workbench 4.4.1 (07.2018) można użyć
Repository
-Rollback/undo...
:źródło
Jego obejście.
Jeśli nie wyślesz na serwer, sklonujesz do nowego folderu, w przeciwnym razie wyczyścisz (usuniesz wszystkie pliki) z folderu repozytorium i sklonujesz nowy.
źródło
po ściągnięciu i zaktualizowaniu obszaru roboczego zrób thg i kliknij prawym przyciskiem myszy zbiór zmian, którego chcesz się pozbyć, a następnie kliknij modyfikuj historię -> pasek, usunie to zestaw zmian i wskażesz domyślną wskazówkę.
źródło