Co oznacza cherry-picking commit z Gitem?

Ostatnio zostałem poproszony, aby wybrać commit. Ale nie mam pojęcia, co to znaczy. Co oznacza cherry picking commit w git? Jak ty to robisz?

Author: robingrindrod, 2012-02-18

6 answers

Cherry picking w git oznacza wybrać commit z jednej gałęzi i zastosować go na innej.

Jest to w przeciwieństwie do innych sposobów, takich jak merge i rebase, które zwykle stosują wiele commitów do innej gałęzi.

  1. Upewnij się, że jesteś w gałęzi, do której chcesz zastosować commit.

    git checkout master
    
  2. Wykonaj następujące polecenie:

    git cherry-pick <commit-hash>
    

NB:

  1. Jeśli wybierzecie Państwo z publicznego oddziału, powinniście rozważyć użycie

    git cherry-pick -x <commit-hash>
    

    Wygeneruje to ustandaryzowany komunikat commit. W ten sposób ty (i twoi współpracownicy) możesz nadal śledzić pochodzenie commita i możesz uniknąć konfliktów scalania w przyszłości.

  2. Jeśli masz notatki dołączone do commita, nie podążają one za wyborem. Aby je również przynieść, musisz użyć:

    git notes copy <from> <to>
    

Dodatkowe linki:

 1747
Author: Philip Fourie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-14 15:02:16

Ten cytat pochodzi z; Kontrola wersji za pomocą Git (Naprawdę świetna książka, zachęcam do zakupu, jeśli jesteś zainteresowany git)

Edit: ponieważ ta odpowiedź wciąż robi wrażenie, chciałbym dodać bardzo ładny w akcji samouczek wideo o tym:

Youtube: Wprowadzenie do Git cherry-pick

Używając git cherry-pick polecenie git cherry-pick commit stosuje zmiany wprowadzone przez commit o nazwie w bieżącej gałęzi. Będzie Wprowadź nowy, odrębny commit. ściśle mówiąc, używając Gita cherry-pick nie zmienia istniejącej historii w repozytorium; zamiast tego, dodaje do historii. Podobnie jak w przypadku innych operacji Git, które wprowadzenie zmian w procesie stosowania różnic, może być konieczne rozwiązuj konflikty, aby w pełni zastosować zmiany z podanego commita . Polecenie Git cherry-pick jest zwykle używane do wprowadzania konkretnych commity z jednej gałęzi w repozytorium na inny branch. A często używa się forward - lub back-port commits z obsługi technicznej oddział do oddziału rozwojowego.

$ git checkout rel_2.3
$ git cherry-pick dev~2 # commit F, above

Przed: przed

Po: po

 195
Author: Teoman shipahi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-19 19:59:34

Cherry picking w Git jest przeznaczony do stosowania commitów z jednej gałęzi do innej gałęzi. Można to zrobić, jeśli np. popełnił błąd i popełnił zmianę w niewłaściwej gałęzi, ale nie chcesz połączyć całą gałąź. Możesz po prostu np. Przywróć commit i wybierz go na innej gałęzi.

Aby go użyć, wystarczy git cherry-pick hash, gdzie hash jest Hashem commita z innej gałęzi.

Pełna procedura patrz: http://technosophos.com/2009/12/04/git-cherry-picking-move-small-code-patches-across-branches.html

 129
Author: Tadeck,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-14 10:41:34

Cherry-pick jest funkcją Gita. Jeśli ktoś chce zatwierdzić określone commity w jednej gałęzi do gałęzi docelowej, wtedy używa się cherry-pick.
git cherry-pick kroki są jak poniżej.

  1. checkout (switch to) target branch.
  2. git cherry-pick <commit id>
    

    Tutaj identyfikator zatwierdzenia jest identyfikatorem aktywności innego branch.Eg.

    git cherry-pick 9772dd546a3609b06f84b680340fb84c5463264f
    
  3. push to target branch

Wizyta https://git-scm.com/docs/git-cherry-pick

 27
Author: Vijay S B,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-09 00:48:31

Możesz pomyśleć, czy cherry pick jest podobny do rebase, czy raczej jest zarządzany jak rebase. Chodzi mi o to, że pobiera istniejący commit i regeneruje go, przyjmując jako punkt wyjścia, głowę gałęzi, w której aktualnie się znajdujesz.

A rebase pobiera commit, który miał rodzica X i regeneruje commit tak, jakby faktycznie miał rodzica Y, a to właśnie robi cherry-pick.

Cherry pick jest bardziej o tym, jak wybierasz commity. With pull (rebase), git domyślnie regeneruje lokalne commity na szczycie tego, co jest pobierane do Twojej gałęzi, ale za pomocą cherry-pick jawnie wybierasz niektóre commity i domyślnie regenerujesz je na górze bieżącej gałęzi.

Więc sposób w jaki to robisz różni się, ale pod maską są to bardzo podobne operacje-regeneracja commitów.

 8
Author: Hugh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-11 22:00:30

To coś w rodzaju kopiowania (skądś) i wklejania (skądś), ale dla określonych commitów.

Jeśli chcesz na przykład wykonać poprawkę, możesz użyć funkcji cherry-pick.

Wykonaj cherry-pick w gałęzi deweloperskiej i merge, które zobowiązują się do gałęzi release. Podobnie, wykonaj cherry-pick z gałęzi release do master. Voila

 4
Author: Ajeet Sharma,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-11 21:54:23