Skip to content

pull request

Valerii Zuev edited this page Feb 22, 2020 · 4 revisions

Создание feature-ветки и оформление pull request

Видео: YouTube


Создаём свою ветку на GitHub (в реальности ответвляемся от dev, но в этом руководстве будем использовать dev_sandbox).
Пусть мы создали ветвь feature/sahara. Тогда вводим следующие комады в терминале в папке репозитория:

git fetch
git branch feature/sahara origin/feature/sahara
git checkout feature/sahara

Т. о. мы узнали, что нового в удалённом репозитории; скачали нужную ветку; перешли в неё.
После этого надо внести необходимые изменения. Пусть мы добавили файлы sahara/sahara.txt, sahara/amazonka.txt, sahara/giraffe.txt и изменили файл CONTRIBUTING.md. Сначала проверим статус:

git status
git diff

Убедившись, что всё в порядке, готовимся к коммиту. Если хотим внести в коммит все изменённые, добавленные и удалённые файлы, делаем так:

git add --all

для интереса снова посмотрим:

git status

Наконец, когда убедились, что всё готово - коммит:

git commit -m "#0.0 add lyrics about sahara, etc"

Можно (и даже желательно) тут же выгрузить изменения на удалённый сервер:

git push

Теперь готовимся к pull request. Нужно внести в свою ветку все изменения, произошедшие в dev_sandbox.

git checkout dev_sandbox
git pull
git checkout feature/sahara
git merge dev_sandbox

Если в dev_sandbox и нашей ветке были изменены одинаковые файлы, может возникнуть merge conflict. Эту ситуацию мы не рассматриваем.
После вливания выгружаем изменения на удалённый сервер:

git push

Всё, можно оформлять pull request.

Замечания

Команда git add --all добавляет в область пред-коммита (staging area) все изменения. Это не всегда удобно.
Если не хотим вносить в коммит изменения, к примеру, в CONTRIBUTING.ru.md, можно вместо этого так:

git add sahara

или:

cd sahara
git add .

или третий вариант:

git add --all
git reset HEAD CONTRIBUTING.md

Если же мы решили вообще вернуть CONTRIBUTING.md в состояние последнего коммита, вводим

git checkout HEAD CONTRIBUTING.md

Будьте аккуратны с командой checkout. Если её вызвать, передав в виде аргумента имя папки или файла, она удаляет все внесённые туда изменения.
Команда git checkout dev (т. е. с аргументом - именем ветки) не удаляет файлы.

Если хотим посмотреть разницу между dev_sandbox и feature/sahara, вводим (находясь в ветке feature/sahara) команду

git diff dev_sandbox