Ilustracja polecenia „git cherry-pick”

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

When a bug is discovered it is important to deliver a fix to end users as quickly as possible. For an example scenario,say a developer has started work on a new feature. During that new feature development they identify a pre-existing bug. The developer creates an explicit commit patching this bug. This new patch commit can be cherry-picked directly to the main branch to fix the bug before it effects more users.

Cofanie zmian i przywracanie utraconych commitów

Sometimes a feature branch may go stale and not get merged into main. Sometimes a pull request might get closed without merging. Git never loses those commits and through commands like git log and git reflog they can be found and cherry picked back to life.

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 Feature

Polecenie git cherry-pick jest proste w użyciu i można je wykonać następująco:

git cherry-pick commitSha

In this example commitSha is a commit reference. You can find a commit reference by using git log. In this example we have constructed lets say we wanted to use commit `f` in main. First we ensure that we are working on the main branch.

git checkout main

Następnie wykonujemy operację „cherry pick” za pomocą następującego polecenia:

git cherry-pick f

Po wykonaniu nasza historia Git będzie wyglądać następująco:

    a - b - c - d - f   Main
         \
           e - f - g Feature

The f commit has been successfully picked into the main branch

Przykłady polecenia „git cherry-pick”

Za pomocą polecenia git cherry-pick można również przekazać pewne opcje wykonania.

-edit

Przekazanie opcji -edit spowoduje wyświetlenie w Git monitu o komunikat dotyczący commita przed zastosowaniem operacji „cherry pick”.

--no-commit

Opcja --no-commit spowoduje wykonanie operacji „cherry pick”, jednak zamiast utworzenia nowego commita zawartość commita docelowego jest przenoszona do katalogu roboczego bieżącej gałęzi.

--signoff

Opcja --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.