Git — przypadkowe wybieranie
git cherry-pick to zaawansowane polecenie, które umożliwia wybranie dowolnego commita Git przez referencję i dołączenie go do bieżącego roboczego wskaźnika HEAD. Operacja „cherry pick” polega na wybraniu commita z gałęzi i dołączeniu go do innej gałęzi. Polecenie git cherry-pick może być przydatnym narzędziem do cofania zmian. Załóżmy na przykład, że commit zostanie przypadkowo wprowadzony w niewłaściwej gałęzi. Możesz przełączyć się do właściwej gałęzi i za pomocą operacji „cherry pick” wstawić commit tam, gdzie powinien się znaleźć.
Kiedy używać polecenia „git cherry-pick”
Polecenie git cherry-pick jest użytecznym narzędziem, ale nie zawsze najlepszym rozwiązaniem. Operacja „cherry pick” może doprowadzić do powstania zduplikowanych commitów, a w wielu sytuacjach, w których mogłaby zadziałać, preferuje się tradycyjne operacje scalania. Mając to na uwadze, warto wskazać kilka sytuacji, w których polecenie git cherry-pick naprawdę się przydaje.
Współpraca zespołowa
W zespołach często zdarza się, że poszczególni członkowie pracują na tym samym kodzie lub wokół niego. Przykładowo wtedy, gdy nowa funkcja produktu ma komponent backendowy i frotnendowy. Może się też zdarzyć, że dwa różne sektory produktu wykorzystują pewną część wspólnego kodu. Przykładowo programista backendu tworzy strukturę danych, która będzie musiała być używana także we frontendzie. W takiej sytuacji programista pracujący nad frontendem może użyć polecenia git cherry-pick do wybrania commita, w którym utworzono tę hipotetyczną strukturę danych. Taki wybór dałby programiście frontendu możliwość kontynuowania pracy po swojej stronie projektu.
Poprawki błędów
W razie wykrycia błędu najważniejsze jest jak najszybsze dostarczenie poprawki użytkownikom końcowym. W naszym przykładowym scenariuszu załóżmy, że programista rozpoczął pracę nad nową funkcją. W trakcie pracy nad tą nową funkcją wykryto wcześniej istniejący błąd. Programista tworzy jawny commit z poprawką tego błędu. Za pomocą polecenia cherry-pick można pobrać commit z nową poprawką bezpośrednio do gałęzi main, aby naprawić błąd, zanim dotknie on większej liczby użytkowników.
Cofanie zmian i przywracanie utraconych commitów
Bywa, że gałąź funkcji staje się nieaktualna i nie jest scalana z gałęzią główną. Czasami pull requesty są zamykane bez scalania. W Git takie commity nigdy nie giną i można je wyszukać za pomocą takich poleceń jak git log czy git reflog, a następnie odpowiednio wyselekcjonować.
Jak używać polecenia „git cherry-pick”
Aby zademonstrować sposób użycia polecenia git cherry-pick, załóżmy, że mamy repozytorium o następującym stanie gałęzi:
a - b - c - d Main
\
e - f - g FeaturePolecenie git cherry-pick jest proste w użyciu i można je wykonać następująco:
git cherry-pick commitShaW tym przykładzie fragment commitSha jest odniesieniem do commita. Odniesienie do commita można znaleźć za pomocą polecenia git log. Na potrzeby tego przykładu załóżmy, że chcieliśmy użyć commita „f” w gałęzi main. Najpierw musimy się upewnić, że pracujemy w gałęzi main.
git checkout mainNastępnie wykonujemy operację „cherry pick” za pomocą następującego polecenia:
git cherry-pick fPo wykonaniu nasza historia Git będzie wyglądać następująco:
a - b - c - d - f Main
\
e - f - g FeatureCommit „f” został pomyślnie pobrany do gałęzi main.
Przykłady polecenia „git cherry-pick”
Za pomocą polecenia git cherry-pick można również przekazać pewne opcje wykonania.
-editPrzekazanie opcji -edit spowoduje wyświetlenie w Git monitu o komunikat dotyczący commita przed zastosowaniem operacji „cherry pick”.
--no-commitOpcja --no-commit spowoduje wykonanie operacji „cherry pick”, jednak zamiast utworzenia nowego commita zawartość commita docelowego jest przenoszona do katalogu roboczego bieżącej gałęzi.
--signoffOpcja --signoff spowoduje dodanie wiersza podpisu „signoff” na końcu komunikatu dotyczącego commita utworzonego w wyniku operacji „cherry pick”.
Oprócz tych przydatnych opcji polecenie git cherry-pick przyjmuje również różne opcje strategii scalania. Więcej informacji na temat tych opcji zawiera dokumentacja strategii scalania w Git.
Dodatkowo polecenie „git cherry-pick” przyjmuje również opcje związane z rozwiązywaniem konfliktów scalania, takie jak: --abort --continue i --quit, które omówiono szczegółowo w odniesieniu do poleceń git merge i git rebase.
Podsumowanie
„Cherry-pick” to zaawansowane i wygodne polecenie, które bardzo się przydaje w kilku sytuacjach. Nie należy jednak używać go błędnie w zastępstwie poleceń git merge lub git rebase. Aby wyszukać commity, na których ma być wykonana operacja „cherry pick”, należy użyć polecenia git log.