Git - cherry-pick czyli jak wziąć zmianę z commita innego brancha

Autor podstrony: Krzysztof Zajączkowski

Stronę tą wyświetlono już: 783 razy

A chciałoby się czasem ukraść jedną małą zmianę z innego branch-a, gdyby tylko istniał jakiś sprytny, żeby nie powiedzieć przebiegły sposób na to. Nie zamartwiaj się albowiem tak się jakoś składa, że istnieje polecenie cherrypick, które do tego służy. Zanim jednak go użyję pozwól, że do wcześniej przerobionych kroków dodam dwa nowe branch-e i (oczywiście) parę commit-ów. W tym celu:

git checkout -b 004_list_of_git_structure_types
Switched to a new branch '004_list_of_git_structure_types'

A następnie w pliku style.css na jego końcu dodam:

ul { list-style-type: none; padding: 0; display: flex; align-items: center; flex-direction: column; }

po czym w pliku index.html po aside:

<h2>Podstawowe elementy struktury git-a</h2> <ul> <li>branch</li> <li>commit</li> </ul>

A teraz commit-uję:

git add style.css
git commit -m "add style for ul elements"
[004_list_of_git_structure_types caf5a80] add style for ul elements
 1 file changed, 9 insertions(+), 1 deletion(-)

I jeszcze raz:

git add index.html
git commit -m "add git structures"       
[004_list_of_git_structure_types f8c401b] add git structures
 1 file changed, 7 insertions(+)

I przełączam się z najdzikszą rozkoszą na develop-a:

git checkout develop

teraz utworzę kolejnego branch-a, który będzie potrzebował zmian z poprzedniego:

git checkout -b 005_add_merging_operations_types

Teraz w pliku index.html zaraz po aside dodam:

<h2>Operacje łączenia dwóch branch-y</h2> <ul> <li>merge</li> <li>rebase</li> </ul>

I jak zwykle zapisuję zmiany:

git add index.html
git commit -m "add types of combining branches"

Teraz wiem, że na drugim branch-u mam zmiany, których potrzebuję. Nie chcę tworzyć konfliktów, chcę tylko tych zmian. Przełączam się więc na branch-a 004_list_of_git_structure_types:

git checkout 004_list_of_git_structure_types

a następnie poleceniem log wyświetlam listę commit-ów i znajduję:

commit caf5a80570df1a8a9aedc8f0001d33defc7485a7
Author: author 
Date:   Sun May 22 14:29:31 2022 +0200

    add style for ul elements

Kopiuję id commita: caf5a80570df1a8a9aedc8f0001d33defc7485a7 i czym prędzej przełączam się na mojego branch-a:

git checkout 005_add_merging_operations_types
Switched to branch '005_add_merging_operations_types'

I czas na cherry-pick-a:

git cherry-pick caf5a80570df1a8a9aedc8f0001d33defc7485a7
[005_add_merging_operations_types 9d2feaf] add style for ul elements
 Date: Sun May 22 14:29:31 2022 +0200
 1 file changed, 9 insertions(+), 1 deletion(-)