Przejdź do głównej zawartości

Punkty kontrolne i rozgałęzianie: bezpieczne eksperymentowanie na dużą skalę

Punkty kontrolne i rozgałęzianie: bezpieczne eksperymentowanie na dużą skalę

Dział zatytułowany „Punkty kontrolne i rozgałęzianie: bezpieczne eksperymentowanie na dużą skalę”

Punkty kontrolne w Cursor są jak commity Git dla twojego rozwoju wspomaganego przez AI—ale szybsze i bardziej płynne. Umożliwiają odważne eksperymentowanie, pozwalając próbować śmiałe podejścia refaktoryzacyjne, wiedząc, że możesz natychmiast się wycofać, jeśli coś pójdzie nie tak.

W przeciwieństwie do Git, który wymaga jawnych commitów, Cursor automatycznie tworzy lekkie migawki twojego kodu w kluczowych momentach. Pomyśl o tym jako o inteligentnym systemie “cofnij”, który rozumie semantyczne granice twoich zmian.

Cursor tworzy punkty kontrolne automatycznie gdy:

  • Przed zmianami trybu Agent: Za każdym razem, gdy Agent rozpoczyna zadanie
  • Po znaczących edycjach: Gdy Agent kończy operację na wielu plikach
  • W naturalnych granicach: Między odrębnymi zadaniami w konwersacji
  • Przy przełączaniu trybów: Podczas zmiany z trybu Agent na Manual

Możesz również tworzyć punkty kontrolne ręcznie:

// W czacie, po prostu zapytaj:
"Stwórz punkt kontrolny przed rozpoczęciem refaktoryzacji"
// Lub użyj przycisku punktu kontrolnego w interfejsie
// Znajduje się w obszarze wprowadzania czatu przy przeglądaniu poprzednich wiadomości

Gdy próbujesz wielu podejść do rozwiązania problemu:

  1. Stwórz podstawowy punkt kontrolny

    "Stwórz punkt kontrolny - będziemy próbować trzech różnych
    podejść do optymalizacji tego algorytmu"
  2. Wypróbuj podejście 1

    "Zaimplementuj optymalizację używając memoizacji"
  3. Punkt kontrolny i reset

    "Stwórz punkt kontrolny. Teraz przywróć do podstawy i wypróbuj podejście 2"
  4. Wypróbuj podejście 2

    "Zaimplementuj optymalizację używając programowania dynamicznego"
  5. Porównaj i wybierz Przejrzyj obie implementacje, wybierz najlepszą, przywróć do niej

Dla refaktoryzacji na dużą skalę używaj punktów kontrolnych jako kamieni milowych:

graph LR A[Start] --> B[Punkt kontrolny: stan czysty] B --> C[Refaktoryzuj moduł 1] C --> D[Punkt kontrolny: moduł 1 gotowy] D --> E[Testuj moduł 1] E --> F{Testy przeszły?} F -->|Tak| G[Refaktoryzuj moduł 2] F -->|Nie| H[Przywróć punkt kontrolny] H --> I[Napraw problemy] I --> E G --> J[Punkt kontrolny: moduł 2 gotowy]

Używaj punktów kontrolnych jako ubezpieczenia dla ryzykownych operacji:

// Przed złożoną migracją bazy danych
"Stwórz punkt kontrolny: stan przed migracją"
// Przed aktualizacją głównych zależności
"Punkt kontrolny przed aktualizacją do React 19"
// Przed zastosowaniem automatycznych poprawek
"Punkt kontrolny, następnie napraw wszystkie błędy ESLint automatycznie"

1. Łańcuchy punktów kontrolnych dla złożonych funkcji

Dział zatytułowany „1. Łańcuchy punktów kontrolnych dla złożonych funkcji”

Gdy budujesz funkcję z wieloma współzależnymi częściami:

  • FolderPunkt kontrolny 1 : wstępna konfiguracja
    • Utworzona struktura punktu końcowego API
    • Dodany schemat bazy danych
  • FolderPunkt kontrolny 2 : backend ukończony
    • Zaimplementowana logika biznesowa
    • Dodana walidacja
    • Utworzone testy
  • FolderPunkt kontrolny 3 : frontend rozpoczęty
    • Utworzone komponenty
    • Dodane routing
  • FolderPunkt kontrolny 4 : integracja ukończona
    • Połączony frontend z API
    • Dodana obsługa błędów
  • FolderPunkt kontrolny 5 : dopracowanie i optymalizacja
    • Dodane stany ładowania
    • Zaimplementowane buforowanie

Używaj punktów kontrolnych do eksploracji równoległych ścieżek implementacji:

// Punkt kontrolny: podstawa
"Zaimplementuj zarządzanie użytkownikami jako REST API"
// Praca postępuje...
// Punkt kontrolny: implementacja REST ukończona

Dodawaj znaczące opisy do swoich punktów kontrolnych:

// Dobre praktyki punktów kontrolnych
"Punkt kontrolny: system uwierzytelniania działa - wszystkie testy przechodzą"
"Punkt kontrolny: linia bazowa przed optymalizacją (obecne: odpowiedź 250ms)"
"Punkt kontrolny: funkcja ukończona, wymaga przeglądu kodu"
// Unikaj niejasnych punktów kontrolnych
"Punkt kontrolny" // Zbyt ogólne
"Zapisz" // Nieopisowe

Używaj punktów kontrolnych do eksploracji

Szybkie iteracje, próbowanie różnych podejść, tymczasowe eksperymenty

Używaj Git do kamieni milowych

Ukończone funkcje, stabilne stany, współpraca zespołowa

  1. Zacznij od czystego stanu Git

    Okno terminala
    git status # Upewnij się, że katalog roboczy jest czysty
  2. Używaj punktów kontrolnych podczas rozwoju

    • Twórz wiele punktów kontrolnych podczas pracy
    • Wypróbuj różne podejścia
    • Refaktoryzuj bez strachu
  3. Skonsoliduj w commity Git

    Okno terminala
    # Po osiągnięciu dobrego stanu przez punkty kontrolne
    git add -A
    git commit -m "feat: implement user authentication"
  4. Wyczyść historię punktów kontrolnych

    • Punkty kontrolne automatycznie wygasają po sesji
    • Nie ma potrzeby ręcznego czyszczenia

Scenariusze punktów kontrolnych z prawdziwego świata

Dział zatytułowany „Scenariusze punktów kontrolnych z prawdziwego świata”

Starszy deweloper użył punktów kontrolnych do izolacji błędu wydajności:

// Punkt kontrolny 1: linia bazowa (błąd obecny)
"Punkt kontrolny: linia bazowa błędu wydajności - strona ładuje się 3s"
// Punkt kontrolny 2: dodane logowanie
"Dodaj logowanie wydajności do wszystkich zapytań bazy danych"
// Odkryto problem zapytania N+1
// Punkt kontrolny 3: pierwsza próba naprawy
"Zaimplementuj eager loading dla relacji user.posts"
// Zmniejszono do 1.5s, ale nie wystarczająco
// Punkt kontrolny 4: zoptymalizowane zapytanie
"Przepisz zapytanie, aby używało pojedynczego JOIN"
// Sukces! Czas ładowania 200ms
// Finalne: wyczyść logowanie i zatwierdź
"Usuń logowanie debugowania, zachowaj zoptymalizowane zapytanie"

Migracja z REST do GraphQL przy zachowaniu kompatybilności wstecznej:

// Punkt kontrolny: stabilne REST API
"Stwórz resolvery GraphQL, które wywołują istniejące kontrolery REST"
// To pozwala obu API działać jednocześnie
// Punkt kontrolny: wsparcie podwójnego API

Aktualizacja dużej aplikacji z Next.js 13 do 14:

// Strategiczne rozmieszczenie punktów kontrolnych
checkpoints = [
"Przed aktualizacją: wszystkie testy przechodzą",
"Zależności zaktualizowane",
"Rozpoczęta migracja katalogu app",
"Strony skonwertowane na router app",
"Middleware zaktualizowane",
"Budowa pomyślna",
"Testy zaktualizowane i przechodzą",
"Benchmarki wydajności ukończone"
]
// Każdy punkt kontrolny reprezentuje stabilny, odwracalny stan

Dobre praktyki:

  • Twórz punkty kontrolne w logicznych granicach
  • Używaj opisowych komunikatów punktów kontrolnych
  • Nie polegaj na punktach kontrolnych do długoterminowego przechowywania (używaj Git)

Efektywne poruszanie się między punktami kontrolnymi:

// Wyświetl historię punktów kontrolnych
"Pokaż mi wszystkie punkty kontrolne z tej sesji"
// Przywróć konkretny punkt kontrolny
"Przywróć do punktu kontrolnego: 'system uwierzytelniania działa'"
// Porównaj punkty kontrolne
"Co się zmieniło między punktami kontrolnymi 'REST API' i 'GraphQL API'?"

Podczas pracy z zespołem:

  • Komunikuj się, gdy używasz eksperymentalnych punktów kontrolnych
  • Zatwierdź w Git przed ekstensywnym eksperymentowaniem opartym na punktach kontrolnych
  • Udostępniaj wyniki udanych eksperymentów przez gałęzie Git
OperacjaCzasUżycie dysku
Tworzenie punktu kontrolnegoponiżej 100ms~Rozmiar zmienionych plików
Przywracanie punktu kontrolnegoponiżej 500msBrak dodatkowego
Listowanie punktów kontrolnychponiżej 50msBrak dodatkowego
Automatyczne czyszczenieW tleZwalnia miejsce

Dla dużych baz kodu:

  1. Selektywne punkty kontrolne

    // Zamiast punktu kontrolnego całego projektu
    "Stwórz punkt kontrolny tylko dla src/auth/*"
  2. Punkt kontrolny przed ciężkimi operacjami

    // Przed operacjami dotykającymi wielu plików
    "Punkt kontrolny, następnie zaktualizuj wszystkie instrukcje importu"
  3. Regularne commity Git

    • Zmniejsza potrzeby przechowywania punktów kontrolnych
    • Zapewnia trwałą historię
    • Umożliwia współpracę zespołową

Punkt kontrolny niedostępny

Problem: Nie można przywrócić do starego punktu kontrolnego Rozwiązanie: Punkty kontrolne wygasają. Używaj Git dla trwałej historii

Konflikty przywracania

Problem: Przywracanie nie udaje się z powodu konfliktów Rozwiązanie: Zatwierdź obecne zmiany najpierw, następnie przywróć

Degradacja wydajności

Problem: Punkty kontrolne spowalniają Cursor Rozwiązanie: Uruchom ponownie Cursor, aby wyzwolić czyszczenie

graph TD A[Zaplanuj funkcję] --> B[Stwórz podstawowy punkt kontrolny] B --> C[Implementuj z agentem] C --> D{Zadowolony z rezultatu?} D -->|Nie| E[Przywróć punkt kontrolny] E --> F[Dostosuj podejście] F --> C D -->|Tak| G[Stwórz punkt kontrolny sukcesu] G --> H[Przetestuj dokładnie] H --> I{Testy przeszły?} I -->|Nie| J[Napraw problemy] J --> H I -->|Tak| K[Commit Git] K --> L[Następna funkcja]

Używaj punktów kontrolnych podczas implementacji przeglądu kodu:

  1. Punkt kontrolny przed adresowaniem opinii
  2. Wypróbuj sugestie recenzenta
  3. Jeśli sugestia nie działa, przywróć i spróbuj alternatywy
  4. Punkt kontrolny udanych ulepszeń
  5. Finalne zatwierdzenie Git ze wszystkimi ulepszeniami
  1. Używaj punktów kontrolnych hojnie podczas rozwoju - Są tanie i szybkie

  2. Twórz semantyczne granice - Punkt kontrolny w znaczących punktach, nie losowo

  3. Kombinuj z Git inteligentnie - Punkty kontrolne do eksploracji, Git do konserwacji

  4. Wykorzystuj do nauki - Wypróbuj wiele podejść, aby znaleźć najlepsze rozwiązanie

  5. Czyść regularnie - Pozwól Cursor zarządzać cyklem życia punktów kontrolnych automatycznie

Teraz, gdy opanowałeś punkty kontrolne:

  1. Ćwicz wzorzec gałęzi eksperymentalnej na swojej następnej funkcji
  2. Wypróbuj rozwój równoległy dla swojej następnej decyzji architektonicznej
  3. Przejdź do niestandardowych serwerów MCP, aby rozszerzyć możliwości Cursor

Pamiętaj: punkty kontrolne czynią cię odważnym. Używaj ich do śmiałej eksploracji, szybkiego niepowodzenia i znajdowania optymalnych rozwiązań bez ryzyka. Najlepsi deweloperzy nie boją się eksperymentować—po prostu wiedzą, jak robić to bezpiecznie.