5 zaawansowanych poleceń Git, które usprawnią Twoją grę Git

Jeśli jesteś dzisiaj programistą, prawdopodobnie nauczyłeś się Git, systemu kontroli wersji w sercu nowoczesnych przepływów pracy oprogramowania. Znasz podstawy - jak działają repozytoria, jak tworzyć gałęzie i zatwierdzać zmiany oraz jak scalać te zmiany i żądania ściągnięcia.

Ale teraz, gdy znasz już podstawy, pora na nieco wyższy poziom - aby wykorzystać niektóre z bardziej zaawansowanych funkcji Git w przepływie pracy. Oto pięć zaawansowanych funkcji Git, które będą częścią Twoich obecnych i przyszłych działań deweloperskich.

Uprość historie zatwierdzeń za pomocą git rebase

Kiedy masz dwie gałęzie w projekcie (np. Gałąź rozwojową i gałąź główną), z których każda zawiera zmiany, które należy połączyć, git mergepolecenie jest naturalnym i prostym sposobem ich ujednolicenia. A mergedodaje historię rozwoju jednej gałęzi jako zobowiązanie scalające do drugiej. Chociaż pozwala to zachować pełną szczegółowość obu historii, może to utrudnić śledzenie całej historii projektu. W niektórych przypadkach możesz chcieć prostszego i czystszego wyniku. 

git rebaseKomenda łączy również dwa oddziały, ale robi się to trochę inaczej. A git rebaseprzepisuje historię zatwierdzeń jednej gałęzi, tak aby druga gałąź została włączona do niej od miejsca, w którym została utworzona. Dzięki temu historia zatwierdzeń dla tej gałęzi jest mniej hałaśliwa i bardziej liniowa. Ale oznacza to również, że potencjalnie przydatne szczegóły dotyczące innej gałęzi i procesu scalania są usuwane. 

W tym celu rebasenajlepiej jest używać, gdy masz wiele oddziałów prywatnych , które chcesz skonsolidować w jedną, czystą historię zatwierdzania przed połączeniem jej z gałęzią publiczną. W ten sposób uzyskujesz pełne korzyści  rebase- uczynienie historii zatwierdzeń bardziej liniową i mniej hałaśliwą - bez ukrywania kluczowych szczegółów dotyczących historii zatwierdzeń projektu.

Clean up łączy się z git merge --squash

Innym sposobem, aby scalenia i kolejne zatwierdzenia były mniej zaszumione, jest użycie --squashopcji w programie git merge. --squashpobiera wszystkie zatwierdzenia z nadchodzącej gałęzi i spłaszcza je w jeden skonsolidowany zatwierdzenie.

Piękno zgniecionego scalania polega na tym, że możesz wybrać sposób zastosowania wynikowych plików przemieszczonych. Możesz po prostu zatwierdzić cały zestaw zmian jako jedną lub możesz zatwierdzić kilka plików naraz, w których zmiany są ściśle powiązane. Zgniecione scalanie jest również przydatne, jeśli historia zatwierdzania gałęzi przychodzącej jest przydatna tylko w kontekście tej gałęzi lub jeśli pochodzi ona z gałęzi prywatnej, która i tak zostanie odrzucona.

Podobnie jak w przypadku rebasemetody ta działa najlepiej w przypadku zatwierdzania gałęzi wewnętrznych do mastera, ale w razie potrzeby nadaje się również do żądań ściągnięcia.

Przyspiesz wyszukiwanie błędów za pomocą git bisect

Najtrudniejsze do wytrącenia są subtelne regresje w kodzie. Wyobraź sobie, że właśnie dodałeś test do swojej bazy kodu, aby wyśledzić błąd, ale nie jesteś pewien, kiedy błąd pojawił się po raz pierwszy ... i masz setki, a nawet tysiące zatwierdzeń w swoim repozytorium. git bisect Komenda pozwala znacznie zmniejszyć ilość kodu trzeba szukać, aby znaleźć popełnić błąd, który stworzył.

Po włączeniu bisect( git bisect start) określasz dwa punkty w swojej bazie kodu, aby zawiązać wyszukiwanie: jeden, w którym wiesz, że rzeczy są złe ( HEADzazwyczaj), i drugi, w którym wiesz, że wszystko jest nadal dobre. bisectsprawdzi zatwierdzenie w połowie drogi między złym a dobrym zatwierdzeniem i pozwoli ci uruchomić testy. Ten proces podziału binarnego powtarza się, dopóki nie pojawi się zatwierdzenie, które zepsuło sprawę.

git bisectjest darem niebios dla dużych baz kodów z długimi, złożonymi historiami zatwierdzeń, oszczędzając ci kłopotów z koniecznością sprawdzania każdego ostatniego zatwierdzenia w nadziei, że wcześniej czy później znajdziesz swój błąd. Na bardzo najmniej, bo zmniejszają o połowę ilości poszukiwania i badania trzeba zrobić.

Ponownie zastosuj zatwierdzenie za pomocą git cherry-pick

Wiele zaawansowanych gitpoleceń jest użytecznych tylko w ściśle określonych okolicznościach i jest bezpiecznie ignorowanych nawet przez średnio zaawansowanych użytkowników. Ale kiedy wpadniesz w jedną z tych szczególnych okoliczności, warto je znać.

Rozważ git cherry-pick. Pozwala na pobranie danego zatwierdzenia - dowolnego zatwierdzenia z dowolnej gałęzi - i zastosowanie go do innej gałęzi, bez konieczności stosowania jakichkolwiek innych zmian z historii tego zatwierdzenia. Jest to przydatne w kilku kluczowych sytuacjach:

  • Zatwierdziłeś niewłaściwą gałąź i chcesz ją szybko zastosować do właściwej.
  • Chcesz zastosować poprawkę z gałęzi do linii głównej przed kontynuowaniem innych prac nad kodem linii miejskiej.

Zauważ, że masz kilka opcji poza bezpośrednim zastosowaniem zatwierdzenia podczas cherry-pickjego wykonywania. Jeśli --no-commitna przykład przejdziesz tę opcję, wybrane zatwierdzenie zostanie umieszczone w obszarze pomostowym bieżącej gałęzi. 

Elegancko organizuj projekty za pomocą modułów podrzędnych Git

Podobnie jak większość języków programowania umożliwia importowanie pakietów lub modułów, Git oferuje sposób automatycznego dołączania zawartości jednego repozytorium do drugiego, czyli modułu podrzędnego . Możesz utworzyć podkatalog wewnątrz repozytorium i automatycznie zapełnić go zawartością innego repozytorium, zazwyczaj odwołując się do określonego skrótu zatwierdzenia w celu zachowania spójności.

Zwróć uwagę, że podmoduły Git działają najlepiej w następujących warunkach:

  • Podmoduły, o których mowa, nie zmieniają się często lub są zablokowane dla określonego zatwierdzenia. Wszelkie prace nad modułem podrzędnym, a nie z modułem podrzędnym, powinny być zarządzane oddzielnie.
  • Każdy używa wersji Git, która obsługuje moduły podrzędne i rozumie kroki potrzebne do pracy z nimi. Na przykład katalogi modułów podrzędnych nie zawsze są automatycznie zapełniane zawartością repozytorium modułów podrzędnych. Może być konieczne użycie git submodule updatepolecenia w repozytorium, aby zaktualizować wszystko.