Git: Что делать, если одна ветка еще не слита в master, но от неё зависит другая ветка?

Олег Кусов07.08.2022

Пятница, вы кидаете PR ветки feature/a, но хотите на выходных чуть-чуть поработать. У коллег выходной, а изменения нужны вам для продолжения работы. Как быть? Можно, конечно всю фичу делать в одной ветке, но это плохая практика и для удобства команды лучше пилить мелкие фичи. Поэтому давайте рассмотрим другой вариант.

Для того, чтобы не ждать аппрува, необходимо создать ветку feature/b от ветки feature/a:

git checkout feature/a
git checkout -b feature/b

Если на ветке feature/a будут вноситься какие-либо изменения по мере прохождения ревью, можно каждый раз делать rebase:

git checkout feature/a
git pull feature/a
git rebase feature/a feature/b

Если ветка уже была влита в trunk, вносим изменения trunk в feature/b:

git rebase --onto trunk feature/a feature/b

Это команда переключается на ветку feature/b и вносит в trunk все изменения feature/b без изменений ветки feature/a.

Если ветку feature/a решили вообще не сливать, а просто отказаться от этой фичи, но при этом feature/b влить нужно, в этом случае необходимо создать новую ветку, перенести в неё коммиты feature/b:

git checkout -b feature/b-2
git cherry-pick <хэш коммитов через пробел>

Затем нужно вручную удалить участки кода, которые зависели от feature/a.

По материалам stackoverflow