Git Cherry-pick
Ostatnia aktualizacja
git cherry-pick kopiuje zmiany z jednego lub kilku konkretnych commitów i nakłada je na bieżącą gałąź jako nowe commity. W ten sposób bierzesz pojedynczą poprawkę z innej gałęzi bez scalania całej gałęzi. Przydaje się przy przenoszeniu hotfixa do starszej wersji albo wyciąganiu jednego commita z gałęzi funkcji.
Wypróbuj te polecenia w terminalu online: prawdziwa powłoka w przeglądarce, bez żadnej instalacji.
Składnia
| Polecenie | Co robi |
|---|---|
git cherry-pick <hash> | Nakłada jeden commit na bieżącą gałąź |
git cherry-pick <a> <b> | Nakłada kilka commitów po kolei |
git cherry-pick <a>..<b> | Nakłada zakres commitów (bez a) |
git cherry-pick -n <hash> | Nakłada zmiany, ale jeszcze nie tworzy commita |
git cherry-pick -x <hash> | Dopisuje oryginalny commit do wiadomości |
W trakcie cherry-pick
Jeśli cherry-pick trafi na konflikt, rozwiąż go i kontynuuj.
| Polecenie | Co robi |
|---|---|
git cherry-pick --continue | Wznawia po rozwiązaniu konfliktów |
git cherry-pick --abort | Anuluje i przywraca gałąź |
git cherry-pick --skip | Pomija bieżący commit |
Przykład krok po kroku
| Krok | Polecenie | Wynik |
|---|---|---|
| 1 | git log --oneline hotfix | Znajdź hash poprawki, na przykład a1b2c3d |
| 2 | git switch main | Przejdź na gałąź, która ma dostać poprawkę |
| 3 | git cherry-pick a1b2c3d | Nakłada poprawkę na main jako nowy commit z nowym hashem |
Najczęstsze pytania o git cherry-pick
Co robi git cherry-pick?
Bierze zmiany wprowadzone przez konkretny commit i nakłada je na bieżącą gałąź jako zupełnie nowy commit (z nowym hashem). W przeciwieństwie do merge czy rebase nie przenosi całej gałęzi, tylko commit albo commity, które wskażesz.
Kiedy używać cherry-pick?
Wtedy, gdy potrzebujesz jednego konkretnego commita gdzie indziej, na przykład przy przenoszeniu poprawki błędu z
main na gałąź wydania albo wyciąganiu jednego przydatnego commita z gałęzi funkcji bez scalania wszystkiego. Jeśli chcesz całą gałąź, użyj merge albo rebase.Jak zrobić cherry-pick kilku commitów?
Wymień je:
git cherry-pick <a> <b> <c> nakłada każdy po kolei. Dla ciągłego zakresu użyj git cherry-pick <start>..<end>, które nakłada każdy commit po start aż do end włącznie. Napisz <start>^..<end>, jeśli chcesz uwzględnić także sam start.Co zrobić, gdy cherry-pick powoduje konflikt?
Git zatrzymuje się i oznacza pliki z konfliktami. Rozwiąż je, dodaj wynik przez
git add, a potem uruchom git cherry-pick --continue. Żeby wycofać się całkowicie, użyj git cherry-pick --abort, które przywraca gałąź do stanu sprzed rozpoczęcia cherry-pick.Jak zrobić cherry-pick commita z innej gałęzi?
Znajdź hash commita przez
git log --oneline <other-branch>, przełącz się na gałąź, która ma go otrzymać, i uruchom git cherry-pick <hash>. Możesz też podać nazwę gałęzi, np. git cherry-pick feature, co bierze commit z końca tej gałęzi.Czym różni się cherry-pick od merge?
git merge przenosi wszystkie commity z gałęzi i zapisuje miejsce, w którym historie się połączyły. Cherry-pick kopiuje tylko wskazane commity jako nowe, bez powiązania z oryginałami. Scalaj gałąź, gdy chcesz jej całość; używaj cherry-pick, gdy chcesz jeden czy dwa commity.
Czy mogę to przećwiczyć online?
Tak. Otwórz terminal online i uruchom
git cherry-pick w prawdziwej powłoce w przeglądarce, bez żadnej instalacji. Darmowy interaktywny kurs Git w Coddy też krok po kroku omawia przenoszenie commitów między gałęziami.