Mam parę zatwierdzeń, które naprawdę powinny być tylko jednym. Gdybym używał gita, użyłbym:
git rebase -i <some-commit-before>
a następnie zgnieć je.
Czy mogę to zrobić w Mercurial? Jeśli tak to jak?
Tak, możesz to zrobić, używając Mercurial bez żadnych rozszerzeń, łącząc zestawy zmian .
Alternatywnie, jeśli chcesz użyć rozszerzenia, możesz użyć:
Moim ulubionym jest
hg strip --keep
rozkaz. A potem zatwierdzam wszystkie zmiany w jednym zatwierdzeniu.To dla mnie najszybszy i najwygodniejszy sposób, bo w codziennej pracy lubię wykonywać wiele drobnych zleceń;)
Uwaga 1: do włączenia
strip
potrzebne jest wbudowane rozszerzeniemq
.Uwaga 2: Mój ulubiony klient Git / Mercurial (SmartGit / Hg) domyślnie dodaje
--keep
parametr podczasstrip
. A co jest jeszcze wygodniejsze: udostępnia opcję o nazwiejoin commits
:]źródło
hg strip --keep --rev [rev]
Gdzierev
jest numer wersji pierwszego zatwierdzenia, które chcesz zgnieść z ostatnim--rev
jest opcjonalne, pełne polecenie tohg strip --keep [rev]
hg help strip
dajehg strip [-k] [-f] [-n] [-B bookmark] [-r] REV...
, a pomijając korektę daje miabort: empty revision set
.hg strip
nie jest najlepszym pomysłem. To nie jest do końca bezpieczne. Spróbujhg histedit
, a może nawet spróbuj użyć rozszerzenia evolve.Przedłużenie rebase pracował jak czar. Aby zmiażdżyć 2 zatwierdzenia:
Kropka to skrót do aktualnej wersji.
Jest to jeszcze łatwiejsze, gdy masz kilka zatwierdzeń na gałęzi i chcesz je wszystkie zwinąć w jedną:
Jak to działa:
(z http://mercurial-scm.org/wiki/RebaseExtension#Collapsing )
źródło
evolve
jest rozszerzeniem mercurial, które pomaga nam w bezpiecznej mutowalnej historii, ale wciąż jest eksperymentalne. Możesz go użyć, klonując go z repozytorium i dodając do swojego .hgrc w ten sposób.Zakładając, że sklonowałeś repozytorium evolve w swoim katalogu domowym. Teraz możesz już iść. Możesz również szukać pomocy przez
hg help fold
.Polecenie zwijania
Mówisz,
fold
aby zgnieść / złożyć liniowy łańcuch zatwierdzeń, który nie jest zepsuty. To, co robi fold, to tworzy nowy zestaw zmian, który zawiera zmiany ze wszystkich zestawów zmian i oznacza wszystkie te zatwierdzenia jako przestarzałe. Możesz uzyskać dokładniejszy wgląd w to w docs .Teraz załóżmy, że masz następującą historię.
Chcesz się zgnieść
e
,f
ig
. Możesz to zrobićWynik będzie
gdzie
h
jest zbiorem zmian, który zawiera zmiany ze wszystkich trzech zatwierdzeńe
,f
ag
.Możesz również składać zestawy zmian z połowy historii, tzn. Niekoniecznie musisz wybierać łańcuch, który zawiera końcówkę. Załóżmy, że chcemy złożyć
b
,c
id
. Możesz to zrobićSpowoduje to
gdzie
i
jest złożona changeset ob
,c
,d
ij
jest taka sama, jak changeseth
. Podręcznik użytkownika Evolve to lektura obowiązkowa.źródło
--keep
opcja rebase to obejmuje (po czym następuje oznaczenie wersji jako tajne lub użycie paska po sprawdzeniu wyniku). Możliwe jest nawet przenoszenie wersji między innymi wersjami za pomocą sekwencji dwóch poleceń zmiany bazy.W przypadku Mercurial 4.8 (listopad 2018, 9 lat później) można było rozważyć nowe polecenie
hg absorb
(wcześniej była to funkcja eksperymentalna ).Zobacz „ Absorpcja zmian dotyczących zobowiązań w Mercurial 4.8 ”
źródło
Myślę, że
chistedit
(wbudowany od wersji Mercurial 2.3) jest najbliższyrebase -i
temu czysty Mercurial (chistedit
jest to interaktywna wersjahistedit
). Kiedy już się pojawiło,fold
polecenie mapuje do rebase,squash
aroll
mapy poleceń do rebasefixup
. Aby uzyskać więcej informacji, zobacz dokumentację histedit .Oto prosty przykład. Załóżmy, że masz następujące elementy i chcesz przenieść wszystkie zmiany 1e21c4b1 do poprzedniej wersji, zachowując po prostu komunikat z poprzedniej wersji.
Możesz uruchomić
hg chistedit -r b4a738a4
edycję historii z powrotem do b4a738a4. W chistedit następnie przesuń kursor w dół do 1e21c4b1 i naciśnij,r
aby wskazać, że chcesz rzucić tę wersję. Zwróć uwagę, że kolejność w histedit (od najstarszych do najnowszych) jest odwrócona zhg log
( od najnowszych do najstarszych).Po wybraniu zmian decydujesz
c
się je zatwierdzić. Wynik jest następujący:@ bfa4a3be drees tip | Zatwierdzenie 788aa028 drees | Starsze rzeczy
Jeśli jesteś dla nich stosunkowo nowy,
histedit
może to być lepszy wybór niżchistedit
dlatego, że zawiera opisy poleceń w pliku histedit w celach informacyjnych. Po prostu wymaga trochę więcej edycji, aby ustawić polecenia za pomocą normalnej edycji tekstu (tak jak normalna rebase).Uwaga, aby użyć któregoś z nich
histedit
lubchistedit
musisz dodaćhistedit
do swoich rozszerzeń w swoim ~ / .hgrc:Zasugerowałem,
chistedit
ponieważ jest najbliżejrebase -i
i działa w dowolnym miejscu w historii. Jeśli naprawdę chcesz po prostu podciągnąć / dostosować bieżącą wersję do poprzedniej, @G. Sugestia Demeckiegostrip
może być dobra, ponieważ to, co się dzieje, jest jasne. Jest wbudowany od wersji Mercuria 2.8. Aby uzyskać równoważne wyniki jak powyżej, możesz wykonać następujące czynności:Uwaga
strip
, podobnie jak histedit, musi być włączone w twoim ~ / .hgrc:źródło
Załóżmy, że chcesz zgnieść (zjednoczyć) 2 ostatnie zatwierdzenia.
Znajdź numer wersji
możliwe wyjście:
Gałąź z miękkim resetem
Zatwierdź zmiany ponownie
Uwagi
strip
wymaga włączenia wbudowanego rozszerzenia. Utwórz / edytuj~/.hgrc
plik konfiguracyjny z następującą zawartością:źródło
Używam:
źródło