Jak skopiować niektóre commity z jednego brancha na drugi?
Dzisiaj stała się taka sytuacja, że przez roztargnienie zamiast utworzyć nowy branch z mastera pracowałem na branchu z całkowicie nową funkcjonalnością, która zanim wejdzie na mastera to minie jeszcze kilka dobrych tygodni. Niestety moje zadanie było dość ważne i nie mogło tyle czekać. Także co robić?
Opcja pierwsza – bardzo kiepska. Kopiuje linijka po linijce wszystkie zamiany z jednego brancha na drugi. Nudne, żmudne i nie pasuje do mojej leniwej natury.
Opcja druga – ciekawsza. Polecenie cherry-pick. Jest to polecenie w gicie, które kopiuje zmiany z jednego brancha (gałęzi) do aktualnej. Polecenie to pozwala kopiować poszczególne commity.
Działanie jest wyjątkowo proste. Przechodzimy na brancha na który mamy skopiować commita niech to będzie hotfix-error-500. Wyszukujemy np w gitlabie czy githubie odpowiedniego commita i na koniec wykonujemy polecenie git cherry-pick hashCommita
Najpierw najważniejsze. Jak znaleźć ten hash commita? Wersja najprostsza czyli wchodzimy na gitlaba do odpowiedniego projektu. Wyszukujemy zakładki commits i interesujące nas commity. Klikamy tam przycisk kopiuj lub przepisujemy skrócony hash. Wygląda to tak:
Teraz kod w całej okazałości:
git checkout master
git checkout -b hotfix-error-500
git cherry-pick 76d5f8ad
git commit -m "copy commit"
git push origin hotfix-error-500
No i tyle. O wiele szybciej niż kopiować teraz wszystkie zmiany związane z zadaniem 😉