Mam wiele zmian, które wprowadziłem do mojego lokalnego repozytorium, ale nie zostały one jeszcze wprowadzone. Ponieważ funkcja zajmuje więcej czasu niż oczekiwano, chcę zamienić te zmiany na nazwaną gałąź przed naciśnięciem. W jaki sposób mogę to zrobić?
124
Odpowiedzi:
Jak zasugerował Mark, MqExtension jest jednym z rozwiązań Twojego problemu. IMHO prostszym przepływem pracy jest użycie rozszerzenia rebase . Załóżmy, że masz taką historię:
Oznacza to, że wersja
0
jest podstawą, na której zacząłeś pracować nad swoim elementem.1-2
Powiedzmy, że teraz chcesz mieć poprawki w nazwanej gałęzimy-feature
. Zaktualizuj do wersji0
i utwórz tę gałąź:Historia wygląda teraz tak:
Użyj
rebase
polecenia, aby przenieść wersje1-2
do wersji3
:Daje to następujący wykres:
To wszystko… jak wspomniano w komentarzach do odpowiedzi Marka, poruszanie się po już wprowadzonych zestawach zmian jest ogólnie złym pomysłem, chyba że pracujesz w małym zespole, w którym możesz komunikować się i wymuszać manipulowanie historią.
źródło
fold
polecenia wbudowanego teraz rozszerzenia histedit ).hg log -G
( GraphlogExtension ). Usunąłem ręcznie niektóre linie, ale mógł też zostać wyrenderowany całkowicie automatycznie przy użyciu niestandardowych stylów dziennika .Możesz użyć MqExtension . Powiedzmy, że zestawy zmian do przeniesienia to wersje 1-3:
źródło
Wolę rozwiązanie łatki opisane tutaj przez Marka Tolonena
Co ja mam:
Czego chcę:
polecenia mercurials:
Oto stan mojego lokalnego repozytorium
Teraz muszę usunąć wersje 1, 2 i 3 z mojej domyślnej gałęzi. Możesz to zrobić za pomocą polecenia strip z rozszerzenia mq.
hg strip
usuwa zestaw zmian i wszystkie jego elementy potomne z repozytorium.Włącz rozszerzenie, dodając następujące wiersze do pliku konfiguracyjnego (.hgrc lub Mercurial.ini):
vim ~/.hgrc
i dodaj :A teraz usuń to repozytorium w wersji 1.
i oto jesteśmy
Uwaga: zestawy zmian są różne, ale wersje są takie same
źródło
Dla chętnych do korzystania z GUI
Tortoise Hg
->File
->Settings
i zaznaczrebase
.Uruchom ponownie interfejs użytkownika żółwia
Utwórz nową gałąź, w której będziesz przenosić zmiany. Kliknij nazwę aktualnego oddziału -> wybierz
Open a new named branch
-> wybierz nazwę oddziału.public
(np.draft
) Przejdź do 5. (Jeśli zmiany zostały już opublikowane, a nie jesteś starszym programistą, powinieneś porozmawiać z kimś starszym (zdobądź kozła ofiarnego), ponieważ możesz coś schrzanić , Nie biorę odpowiedzialności :)).Idź do
View
->Show Console
(lub Ctrl+ L), a następnie napisz w konsolihg phase -f -d 2
- gdzie 2 to najniższa wersja, którą będziesz przenosić do nowej gałęzi.Idź do gałęzi i wersji (powinna to być wersja najwyższa, jeśli przenosisz zmiany do nowej gałęzi utworzonej w kroku 3)
Right Mouse
->Update
Przejdź do gałęzi i wersji, z której będziesz przenosić zmiany
Right Mouse
->Modify History
->Rebase
Kliknij
Rebase
i módl się, żeby nie było konfliktów, połącz, jeśli musisz.Wciśnij zmiany, w tym momencie wszystkie wersje powinny nadal być
draft
.Przejdź do najwyższej wersji w gałęzi, do której przenosiłeś zmiany
Right Mouse
->Change Phase to
->Public
.Mam nadzieję, że zaoszczędzi ci to trochę czasu.
źródło
public
już na automagicznie (przynajmniej dla mnie tak się nie dzieje).