git cherry-pick
jest potężnym poleceniem, które umożliwia wybranie dowolnych commitów Git przez odniesienie i dołączenie ich do bieżącego roboczego HEAD. Cherry picking jest aktem wybierania commitów z jednej gałęzi i stosowania ich do innej. git cherry-pick
może być użyteczne do cofania zmian. Na przykład, powiedzmy, że commit został przypadkowo wykonany w złej gałęzi. Możesz przełączyć się na właściwą gałąź i wybrać commit tam, gdzie powinien należeć.
Kiedy używać git cherry pick
git cherry-pick
jest użytecznym narzędziem, ale nie zawsze najlepszą praktyką. Cherry picking może powodować duplikaty commitów i wiele scenariuszy, w których cherry picking będzie działać, zamiast tego preferowane są tradycyjne scalenia. Z tym, że git cherry-pick
jest przydatnym narzędziem dla kilku scenariuszy…
Współpraca zespołowa.
Często zdarza się, że zespół znajdzie pojedynczych członków pracujących w lub wokół tego samego kodu. Może nowa funkcja produktu ma komponent backendowy i frontendowy. Może istnieć pewien wspólny kod pomiędzy dwoma sektorami produktu. Być może programista backendu tworzy strukturę danych, którą frontend również będzie musiał wykorzystać. Programista frontendu mógłby użyć git cherry-pick
, aby wybrać commit, w którym ta hipotetyczna struktura danych została utworzona. Ten wybór umożliwiłby frontend developerowi kontynuowanie postępu po swojej stronie projektu.
Poprawki błędów
Gdy błąd zostanie odkryty, ważne jest, aby dostarczyć poprawkę do użytkowników końcowych tak szybko, jak to możliwe. Dla przykładowego scenariusza, powiedzmy, że programista rozpoczął pracę nad nową funkcjonalnością. Podczas tworzenia nowej funkcjonalności zidentyfikował istniejący wcześniej błąd. Deweloper tworzy jawny commit łatający ten błąd. Ten nowy commit poprawki może zostać przeniesiony bezpośrednio do gałęzi master
, aby naprawić błąd zanim wpłynie on na większą liczbę użytkowników.
Cofanie zmian i przywracanie utraconych commitów
Czasami gałąź feature
może przestać działać i nie zostać scalona z master
. Czasami pull request może zostać zamknięty bez scalania. Git nigdy nie traci tych commitów, a dzięki poleceniom takim jak git log
i git reflog
można je znaleźć i przywrócić do życia.
Jak korzystać z git cherry pick
Aby zademonstrować, jak korzystać z git cherry-pick
, załóżmy, że mamy repozytorium z następującym stanem gałęzi:
a - b - c - d Master
\
e - f - g Feature
git cherry-pick
użycie jest proste i może być wykonane jak:
git cherry-pick commitSha
W tym przykładzie commit
Sha jest odnośnikiem do commitów. Możesz znaleźć referencję commit używając git log
. W tym przykładzie skonstruowaliśmy powiedzmy, że chcemy użyć commit `f` w master
. Najpierw upewnimy się, że pracujemy na gałęzi master
.
git checkout master
Następnie wykonujemy cherry-pick następującą komendą:
git cherry-pick f
Po wykonaniu nasza historia Git będzie wyglądała tak:
a - b - c - d - f Master
\
e - f - g Feature
The f commit has been successfully picked into the master branch
Przykłady git cherry pick
git cherry pick
można również przekazać pewne opcje wykonania.
-edit
Przekazanie opcji -edit
spowoduje, że git wyświetli monit o komunikat commit przed zastosowaniem operacji cherry-pick
--no-commit
Opcja --no-commit
wykona cherry pick, ale zamiast wykonać nowy commit przeniesie zawartość docelowego commita do katalogu roboczego bieżącej gałęzi.
--signoff
Opcja --signoff
doda linię podpisu 'signoff’ na końcu wiadomości commitu cherry-pick
Oprócz tych pomocnych opcji git cherry-pick
akceptuje także różne opcje strategii scalania. Dowiedz się więcej o tych opcjach w dokumentacji git merge strategies.
Dodatkowo git cherry-pick akceptuje również dane wejściowe opcji do rozwiązywania konfliktów scalania, obejmuje to opcje: --abort --continue
i --quit
opcje te są omówione bardziej dogłębnie w odniesieniu do git merge i git rebase.
Podsumowanie
Cherry picking jest potężnym i wygodnym poleceniem, które jest niezwykle przydatne w kilku scenariuszach. Cherry picking nie powinien być nadużywany w miejsce git merge lub git rebase. Polecenie git log jest wymagane, aby pomóc w znalezieniu commitów do cherry picking.