Skończyłem pracę nad gałęzią funkcji feature-x
. Chcę scalić wyniki z powrotem do default
gałęzi i zamknąć feature-x
, aby się go pozbyć na wyjściu hg branches
.
Wymyśliłem następujący scenariusz, ale ma on pewne problemy:
$ hg up default
$ hg merge feature-x
$ hg ci -m merge
$ hg up feature-x
$ hg ci -m 'Closed branch feature-x' --close-branch
Więc feature-x
gałąź (zmienia 40
- 41
) jest zamknięta, ale jest jedna nowa głowa , zestaw zmian gałęzi zamykającej 44
, który będzie wymieniony za hg heads
każdym razem:
$ hg log ...
o 44 Closed branch feature-x
|
| @ 43 merge
|/|
| o 42 Changeset C
| |
o | 41 Changeset 2
| |
o | 40 Changeset 1
|/
o 39 Changeset B
|
o 38 Changeset A
|
Aktualizacja : Wygląda na to, że od wersji 1.5 Mercurial nie wyświetla już główek zamkniętych gałęzi na wyjściu hg heads
.
Czy można zamknąć połączony oddział bez pozostawiania jednej głowy? Czy istnieje bardziej poprawny sposób zamknięcia gałęzi funkcji?
Powiązane pytania:
default
bez ich „zamykania”. Spowodowało to 0 nowych głów, ale takie gałęzie były widoczne nahg branches
zawsze (jako nieaktywne gałęzie).Odpowiedzi:
Jednym ze sposobów jest pozostawienie połączonych gałęzi funkcji otwartych (i nieaktywnych):
Innym sposobem jest zamknięcie gałęzi funkcji przed scaleniem przy użyciu dodatkowego zatwierdzenia:
Pierwszy jest prostszy, ale pozostawia otwartą gałąź. Drugi nie pozostawia otwartych głów / gałęzi, ale wymaga jeszcze jednego zatwierdzenia pomocniczego. Można połączyć ostatnie rzeczywiste zatwierdzenie z gałęzią funkcji z tym dodatkowym zatwierdzeniem za pomocą
--close-branch
, ale należy wcześniej wiedzieć, które zatwierdzenie będzie ostatnim.Aktualizacja : Ponieważ Mercurial 1.5 można zamknąć oddział w każdej chwili, więc nie pojawi się w obu
hg branches
ihg heads
więcej. Jedyną rzeczą, która mogłaby cię drażnić, jest to, że technicznie wykres wersji będzie zawierał jeszcze jedną wersję bez potomka.Aktualizacja 2 : Od kiedy zakładki Mercurial 1.8 stały się podstawową funkcją Mercurial. Zakładki są wygodniejsze do rozgałęziania niż nazwane gałęzie. Zobacz także to pytanie:
źródło
Bookmarks are more convenient for branching than named branches
. Zakładki Hg to nie to samo, co gałęzie Git. Są pełne wielu skrzynek, co czyni je nieodpowiednimi jako gałęzie cech. Na przykład: po sklonowaniu repozytorium skończysz z najnowszym zatwierdzeniem wdefault
gałęzi. Jeśli korzystasz z zakładek, ten zestaw zmian odpowiada losowej (niestabilnej) zakładce. Jeśli użyjesz nazwanych gałęzi, otrzymasz najnowsze zatwierdzenie w gałęzi stabilnej / domyślnej, co zwykle jest tym, czego chcesz. Zakładki dotrą tam pewnego dnia, ale jeszcze ich tam nie ma.abort: push creates new remote branches:
. Co mogłem zrobić źle?imho istnieją dwa przypadki dla oddziałów, które zostały zapomniane do zamknięcia
Przypadek 1: oddział nie został scalony w domyślny
w tym przypadku aktualizuję gałąź i wykonuję kolejne zatwierdzenie z opcją --close-branch, niestety to wybiera gałąź, aby stała się nową wskazówką, a zatem przed przekazaniem jej do innych klonów upewniam się, że prawdziwa wskazówka otrzyma więcej zmian i inne nie daj się zwieść tej dziwnej wskazówce.
Przypadek 2: gałąź została połączona w domyślną
Ten przypadek nie różni się zbytnio od przypadku 1 i można go rozwiązać, odtwarzając kroki dla przypadku 1 i dwóch dodatkowych.
w tym przypadku aktualizuję do zestawu zmian gałęzi, wykonuję kolejne zatwierdzenie z opcją --close-branch i łączę nowy zestaw zmian, który stał się wskazówką domyślną. ostatnia operacja tworzy nową wskazówkę, która znajduje się w domyślnej gałęzi - HOORAY!
Mam nadzieję, że pomoże to przyszłym czytelnikom.
źródło
hg help ci
wyjaśnię ci to.EDYCJA ouch, za późno ... Wiem, że przeczytałem twój komentarz stwierdzający, że chcesz zachować zestaw zmian Feature-X, więc metoda klonowania tutaj nie działa.
Nadal dam odpowiedź tutaj, ponieważ może ona pomóc innym.
Jeśli chcesz całkowicie pozbyć się „funkcji X”, ponieważ na przykład nie działała, możesz sklonować. Jest to jedna z metod wyjaśnionych w artykule i działa, a konkretnie mówi o głowach.
O ile rozumiem, masz to i chcesz raz na zawsze pozbyć się głowy „Feature-X”:
Więc robisz to:
I będziesz mieć następujące, i zobaczysz, że funkcja-x rzeczywiście zniknęła:
Być może źle zrozumiałem, co chciałeś, ale proszę nie zmniejszać, odtworzyłem twój przypadek użycia:)
źródło
Dziwne, że nikt jeszcze nie zaproponował najbardziej niezawodnego sposobu zamykania gałęzi funkcji ... Możesz po prostu połączyć zatwierdzenie scalania z flagą --close-branch (tzn. Zatwierdzić zmodyfikowane pliki i zamknąć gałąź jednocześnie):
To wszystko. Nikt nie zastanawia się nad ponownym zapisaniem. Bez dodatkowego zatwierdzania.
źródło
merge
polecenia dobrym pomysłem może byćhg branch
sprawdzenie, czy nazwa gałęzi scalania jest tą, którą chcesz zachować.