Может войдёшь?
Черновики Написать статью Профиль

Как вливать в проект отдельные коммиты из pull request

перевод

Сегодня вечером я просматривал запросы на включение изменений (pull request) для всех своих открытых репозиториев. И среди них был один изначально отличный pull request, но он был испорчен автором из-за чьего-то плохого совета. Позже я спросил его: «Не мог бы ты переотправить pull request с изначальными коммитами?» Но на тот момент их уже было не вернуть.

Я решил, что выхода нет, и начал включать код в новую ветку. Я легко мог бы привести его в рабочее состояние, но тогда утратилось бы авторство того человека, которое я хотел оставить за ним. Тогда я подумал, почему бы мне немного не погуглить?

Прочитав несколько ответов на Stack Overflow и немного порывшись я нашёл решение: shgit cherry-pick.

Как пользоваться shgit cherry-pick

Оказывается, с помощью «cherry-pick» вы на самом деле можете брать только нужные вам коммиты из pull request. Шаги:

1. Заберите ветку к себе на локальную машину. Используя GUI для git или командную строку, это неважно.

2. Вернитесь обратно к ветке, в которую будете вливать. Это делается подобной командой shgit checkout master.

3. Возьмите в эту ветку нужные вам коммиты с помощью «cherry-pick». Зайдите либо в git log, либо в GitHub UI и выберите уникальные хэши для каждого нужного коммита. А затем выполните команду:

shgit cherry-pick это-очень-длинный-хэш

При этом в вашу текущую ветку будет включён только данный коммит.

4. Отправьте эту ветку как обычно: shgit push origin master.

Пример

Итак, у меня был pull request с новым компонентом PHPlog. Я перешёл к pull request в GitHub и забрал ветку (используя командную строку, но мог бы забрать и через GitHub UI).
Затем я выполнил в командной строке: shgit checkout master. Зашёл в GitHub UI, нашёл нужный мне коммит и скопировал его хэш с помощью маленькой иконки «копировать» рядом с ним в списке коммитов. Далее я выполнил:

shgit cherry-pick это-динный-хэш-скопированный-из-github

После я выложил ветку на GitHub с помощью shgit push origin master. Готово! И наконец закрыл pull request вручную, указав ссылку на коммит.

Как вы считаете, полезен ли этот материал? Да Нет

Комментарии (1)

sait4seo

А что если нужно наоборот слить из родителя не все новые коммиты а выборочно?

Написать комментарий

Разметка: ? ?

Авторизуйся, чтобы прокомментировать.