Edycja historii
W jj przepisywanie historii to codzienna praca, a nie ryzykowne wyjście awaryjne. Gdy zmieniasz commit, Wyrm robi za Ciebie rebase wszystkiego, co leży na nim. Każda z poniższych edycji to jedna operacja, więc cofnięcie ją wycofuje.
Domyślnie jj traktuje Twój trunk (np. main@origin) i tagi jako niezmienne i odmawia ich przepisania. Przełącznik 🛡 to obchodzi, gdy naprawdę o to chodzi.
Większość poleceń znajdziesz w menu kontekstowym commita w logu (prawy przycisk), w sekcji Operacje na commitach. Rzadziej używane są w Więcej.
Podział commita
Dział zatytułowany „Podział commita”Zaznacz commit i wybierz Podziel…. W oknie Podziel commit zaznacz pliki, które mają trafić do pierwszego commita, albo rozwiń fragmenty pliku i wybierz pojedyncze fragmenty (hunki). Kliknij Podziel. Reszta zostaje w drugim commicie na wierzchu.
Możesz też dzielić prosto z diffa: każdy nagłówek fragmentu ma przycisk Podziel.
- Squash do rodzica (
S): wchłania zaznaczony commit do jego rodzica. - Squash do innego commita: zaznacz commit, potem kliknij prawym przyciskiem commit, do którego chcesz go wchłonąć, i wybierz Squash … do ….
- Kilka commitów naraz: zaznacz ciąg sąsiednich commitów i wybierz Squash N commitów razem.
- Squash z opcjami… (w Więcej) może zachować opróżniony commit albo zachować tylko opis rodzica.
Poprawiłeś w kopii roboczej kilka rzeczy, które należą do starszych commitów? Zaznacz @ i wybierz Wchłoń do przodków (A). jj przenosi każdy zmieniony wiersz do commita, który jako ostatni go zmieniał, a to, czego nie potrafi przypisać, zostawia w @.
Praca na fragmentach i pojedynczych wierszach
Dział zatytułowany „Praca na fragmentach i pojedynczych wierszach”W diffie dowolnego commita każdy nagłówek fragmentu ma cztery przyciski:
- Squash ↑: przenosi fragment do commita rodzica.
- Przenieś…: przenosi go do dowolnego innego commita.
- Podziel: wydziela go do osobnego commita.
- Odrzuć: usuwa go z tego commita, więc plik wraca tam do wersji z rodzica.
Aby działać na kilku fragmentach, zaznacz je (Space zaznacza fragment); ⇧-klik wybiera pojedyncze wiersze. Pasek nad diffem pokazuje, ile fragmentów i wierszy jest zaznaczonych. Przy zaznaczeniu ⇧S robi z niego squash, a ⌫ je odrzuca. Odrzucenie najpierw pyta o potwierdzenie. Pliki binarne, ze zmienioną nazwą lub z konfliktami oferują tylko działania na całym pliku.
Kliknięcie fragmentu prawym przyciskiem oferuje te same ruchy: Squash fragmentu do rodzica, Odrzuć zmiany fragmentu, Przenieś fragment do….
Przenoszenie całych plików między commitami
Dział zatytułowany „Przenoszenie całych plików między commitami”W panelu rewizji zaznacz jeden lub więcej plików i użyj Squash do rodzica, Przenieś do… lub Przywróć pliki. Przenieś do… otwiera Przenieś zmiany do…: wpisz Rewizja docelowa (bookmark, change ID lub revset) i kliknij Przenieś.
Możesz też przeciągnąć plik lub fragment na commit w logu i wybrać Squash tutaj.
Edycja lub usunięcie pliku w dowolnej rewizji
Dział zatytułowany „Edycja lub usunięcie pliku w dowolnej rewizji”Kliknij prawym przyciskiem plik wśród zmian commita:
- Edytuj w tej rewizji… otwiera plik w takiej postaci, jaką ma w tym commicie. Zapisz przez
⌘S: Wyrm przepisuje ten commit i robi rebase jego potomków na niego. - Usuń z tej rewizji… usuwa plik tylko z tego commita; późniejsze commity przechodzą rebase.
Panel plików ma te same dwie akcje.
Zmiana kolejności, rebase i więcej
Dział zatytułowany „Zmiana kolejności, rebase i więcej”- Zmień kolejność (
R, przy zaznaczonych co najmniej dwóch commitach): przeciągnij je w żądanej kolejności i kliknij Zastosuj kolejność. - Przeciągnij i upuść: przeciągnij commit na inny, aby wybrać Rebase tutaj, na linię między dwoma commitami, aby wybrać Wstaw tutaj, albo na merge, aby dodać go jako rodzica.
- Rebase na inny commit: zaznacz commit, kliknij prawym przyciskiem commit docelowy i wybierz Rebase … na ….
- Przywróć z rodzica, Duplikuj, Wycofaj (revert) i Porzuć… są w tym samym menu kontekstowym. Więcej dodaje Zmień rodziców…, Uprość rodziców, Przywróć z… i pozostałe warianty.
Jeśli przepisanie wywoła konflikt, jj zapisuje go w commicie, zamiast Cię zatrzymywać. Zobacz Rozwiązywanie konfliktów.