Jest taki commit, który po prostu nie działał, więc chcę go porzucić bez usuwania go z historii .
Zaktualizowałem z wcześniejszej wersji i zobowiązałem się, tworząc w ten sposób nową głowę.
Nie mam gałęzi, nie chcę gałęzi, chcę po prostu kontynuować z nową głową dokładnie taką, jaka jest, nic szczególnego, żadnego połączenia, żadnych zmartwień, po prostu zapominam o poprzednim.
Nie mogę znaleźć sposobu, aby to zrobić i zaczynam wierzyć, że nie da się tego zrobić. Wszystko, co znajduję, to rzeczy dotyczące gałęzi lub rzeczy dotyczące łączenia.
Odpowiedzi:
Zaktualizuj swoje repozytorium do nowej wersji, o której chcesz zapomnieć, a następnie użyj,
hg commit --close-branch
aby oznaczyć (anonimową) gałąź jako zamkniętą. Następnie zaktualizować do szefa oddziału, który nie ma, i kontynuować pracę.Nadal możesz zobaczyć zamkniętą gałąź, jeśli użyjesz tej
-c
opcjihg heads
, ale domyślniehg merge
się nie pojawi i nie będzie wiedział, że nie spróbuje połączyć się z zamkniętą głową.Musisz użyć
hg push --force
pierwszego razu, kiedy przesuwasz tę zamkniętą głowę do innego repozytorium, ponieważ w rzeczywistości tworzysz dodatkowe głowice w zdalnym repozytorium podczas pushowania. Powiedz Mercurialowi, że to w porządku--force
. Ludzie, którzy pociągną za zamkniętą głowę, nie będą przeszkadzać żadnym ostrzeżeniem.źródło
hg heads
... Używam mercurial 1.4.3, czy to nowsza funkcja?hg branches
powinien nadal wyświetlać nazwę gałęzi, na której jesteś. Zamiast próbować zamknąć gałąź, scal anonimową gałąź z powrotem do oryginalnej gałęzi, odrzucając wszystkie zmiany.Wiem, że na tym etapie nie chcesz pracować z oddziałami, ale właśnie to zrobiłeś. Kiedy wróciłeś do wcześniejszej wersji i popełniłeś coś, co działało, utworzyłeś gałąź - gałąź bez nazwy, ale gałąź mimo wszystko.
Nie ma problemu z kontynuowaniem tego, czym jesteś, i nie martwisz się, że masz wiele głów, ale jeśli chcesz uporządkować rzeczy, aby nie przypadkowo wybrać niewłaściwą głowę, możesz zabić starą gałąź.
W dokumentacji Mercurial znajduje się dobra sekcja, która zawiera szereg opcji dotyczących przycinania martwych gałęzi .
Myślę, że najlepszą opcją jest oznaczenie starej gałęzi jako „zamkniętej”. Jeśli twoja stara głowa to wersja „123”, to:
źródło
-C
sięhg update
? Wydawałoby się, że żadne pliki nie zostałyby zmodyfikowane, więc powinno działać bez niego.Przede wszystkim wpisz:
Wyobraź sobie, że masz na liście trzy głowy:
Powiedzmy, że chcesz zachować ostatnią głowę aktywną (223) i zamknąć resztę.
Następnie wykonaj następujące czynności:
Zamknij głowę # 59
Zamknij głowę # 123
Zatwierdź zmiany
Nie zapomnij przejść do prawej głowy na końcu
I jesteś skończony.
źródło
--close-branch -m "Closing branch - technique #2 abandoned in favor of technique #3"
.hg up -r 223
przed dokonaniem jakichkolwiek zmian.hg push --force
, nie tylko,hg push
aby ominąć ostrzeżenie o pchaniu wielu głów.hg push
samo w sobie nie działało. W jaki sposób zaleca się wprowadzanie zmian w zewnętrznym repozytorium, jeśli odmawia z powodu wielu głowic?Chcesz użyć
hg backout
. Spowoduje to usunięcie zmian wprowadzonych przez zestaw zmian z dowolnego zestawu podrzędnego.Sprawdź to, aby uzyskać dobre wyjaśnienie. Wycofanie się z rtęci
źródło
Zarówno odpowiedzi Nialla, jak i Nicka są proste. Ponieważ przyłapuję się na tworzeniu wielu zwisających głów, łatwiej napisałem alias do zamykania głów. Dodając to do
.hgrc
:(jeśli masz już
[alias]
sekcję, możesz do niej dołączyć)Możesz teraz zamknąć głowicę jednym poleceniem (i bez konieczności ręcznego aktualizowania innego zestawu zmian) w następujący sposób:
Uwaga: alias wykorzystuje fakt, że aliasy Mercurial mogą być poleceniami powłoki . Oznacza to, że prawdopodobnie będzie to działać tylko w systemie UNIX, a nie w systemie Windows.
źródło
Alternatywą dla zamykania lub usuwania niechcianej gałęzi byłoby połączenie jej w sposób, który całkowicie odrzuca jej skutki, ale pozostawia ją w historii. Takie podejście umożliwi rozprzestrzenianie się niechcianych zmian w trybie wypychania - więc używaj tego tylko wtedy, gdy jest to zamierzony efekt.
Powiedzmy, że historia zestawu zmian wygląda następująco:
i jest
5
i6
które nie są już potrzebne.Możesz to zrobić:
który stworzy to:
Aktualizacja
8
zapewniająca, że pracujesz nad żądanym szefem w historii, który chcesz zachować.-t :local
Instruuje hg, aby użył „narzędzia” scalania o nazwie local, które każe mu zignorować zmiany z drugiej gałęzi, tj. Tej , która NIE jest reprezentowana przez bieżący stan folderu roboczego. Więcej informacji .W ten sposób niepożądane zmiany
5
i6
zachowały się w historii, ale nie wpływają na coś nowszego.źródło
Jest to przypadek użycia rozszerzenia Evolve . Obecnie nie jest dołączony do Mercurial, więc technicznie jest rozszerzeniem strony trzeciej. Ale jest dość intensywnie wykorzystywany przez grupę ludzi, w tym programistów Mercurial, jest bardzo aktywnie rozwijany i nigdzie się nie wybiera.
Dzięki rozszerzeniu Evolve po prostu to robisz
i kontynuuj swoje życie. Zestaw nadal będzie tam, ale nieaktualny. Nie będzie widoczny, chyba że przekażesz tę
--hidden
opcję komendom Mercurial, a domyślnie nie zostanie przekazany do zdalnych repozytoriów. Chociaż myślę, że możesz to zmusić, jeśli naprawdę chcesz.Jeśli zestaw, który przycinasz, ma przodków, których chcesz zachować, będziesz musiał uruchomić,
hg evolve
aby zmienić bazę tych zmian.hg evolve
zrobi to automatycznie. W przeciwnym razie nie musisz nic robić.źródło
Możesz sklonować swoje zepsute repo do nowego bez klonowania tej niechcianej głowy. Następnie usuń stare repozytorium, przenieś nowo utworzony klon do pierwotnego miejsca i kontynuuj pracę z nim. To zajmie trochę czasu, ale otrzymasz idealnie czyste repozytorium bez oznak tej niechcianej wersji.
źródło
Natrafiłem na ten problem wiele razy, gdy chcę ściąć głowę, która została utworzona przez pomyłkę. Zawsze chcę zobaczyć, jak znika z powierzchni Ziemi.
Na lokalnej kopii pobierz najnowszą wersję, a następnie:
Znajdź początek głowy, którą chcesz rozebrać (gdzie nowa szyja zaczyna się rozgałęziać), uzyskaj numer wersji
Rozbierz to.
Źródło: TipsAndTricks .
Źródło: PruningDeadBranches # Using_strip .
Twoje repozytorium powinno być teraz pozbawione głowy. Ostatni krok jest ważny, ponieważ stripping nie powoduje żadnych zmian, które można przekazać do centralnego repozytorium. Bez ostatniego kroku rozebrałeś głowę tylko lokalnie.
źródło