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?
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.
-
Upewnij się, że jesteś w gałęzi, do której chcesz zastosować commit.
git checkout master
-
Wykonaj następujące polecenie:
git cherry-pick <commit-hash>
NB:
-
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.
-
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:
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:
Po:
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
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.
- checkout (switch to) target branch.
-
git cherry-pick <commit id>
Tutaj identyfikator zatwierdzenia jest identyfikatorem aktywności innego branch.Eg.
git cherry-pick 9772dd546a3609b06f84b680340fb84c5463264f
- push to target branch
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.
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
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