✅ Решения — урок 22

К оглавлению урока

⚡ Быстрое решение

# Fork → clone → ветка → commit → push → PR
git clone https://github.com/YOUR/repo.git
cd repo
git checkout -b feature_x
echo "changes" >> file.txt
git add file.txt
git commit -m "Add changes"
git push origin feature_x
# Открыть PR на GitHub

# Обновить форк:
git remote add upstream https://github.com/ORIG/repo.git
git fetch upstream
git checkout master
git merge upstream/master
git push origin master

Решение: полный PR workflow (шаги 1–10)

Шаг 1. Создать issue

На GitHub: перейдите в репозиторий → вкладка Issues → New Issue. Введите заголовок и описание. Назначьте метку (bug, enhancement, documentation). Нажмите Submit.

Запомните номер созданного issue (например, #9) — он понадобится при создании PR.

Шаг 2. Форкнуть репозиторий

На GitHub: нажмите кнопку «Fork» в правом верхнем углу страницы репозитория.

Шаги 3–4. Клонировать, внести изменения, создать ветку

# Клонируем свой форк
git clone https://github.com/YOUR_USERNAME/repo.git
cd repo

# Убедиться, что находимся на master
git status

# Создать новую ветку по номеру issue (без пробелов)
git checkout -b GH-9-temperature-amplitude

# Внести изменения (редактируем файлы)
echo "$(date)" >> README.md

# Добавить все изменения
git add .

# Создать коммит
git commit -m "Add date to README, closes #9"

Шаг 3а + 3б. Push и открытие PR

# Пушим ветку в свой форк (git подскажет правильную команду)
git push --set-upstream origin GH-9-temperature-amplitude

После push переходим в браузер на GitHub → свой форк → GitHub предложит кнопку «Compare & pull request» → нажимаем → в описании указываем #9 → «Create pull request».

Шаги 4–8. Ревью, обсуждение, правки

Если владелец репозитория указал на проблемы:

# Вносим правки в файлы
# ...

# Добавляем и коммитим правки
git add file.txt
git commit -m "Fix review comments"

# Пушим в ту же ветку (PR обновится автоматически)
git push origin GH-9-temperature-amplitude

Шаг 5. Ребейз перед merge

git rebase master   # или: git rebase main

Шаг 6. Merge

Через GitHub: на странице PR нажать «Merge pull request» → «Confirm merge». Или выбрать «Rebase and merge» для линейной истории.

Шаги 9–10. Вернуться на master и обновиться

git checkout master
git pull

Решение: обновление форка через upstream

# 1. Проверить текущие remote
git remote -v
# origin  https://github.com/YOUR_USERNAME/repo.git (fetch)
# origin  https://github.com/YOUR_USERNAME/repo.git (push)

# 2. Добавить upstream (оригинальный репозиторий)
git remote add upstream https://github.com/ORIG_AUTHOR/repo.git

# Проверить (теперь два remote):
git remote -v
# origin    https://github.com/YOUR_USERNAME/repo.git (fetch)
# origin    https://github.com/YOUR_USERNAME/repo.git (push)
# upstream  https://github.com/ORIG_AUTHOR/repo.git (fetch)
# upstream  https://github.com/ORIG_AUTHOR/repo.git (push)

# 3. Получить все обновления из upstream
git fetch upstream

# 4. Переключиться на master
git checkout master

# 5. Слить upstream/master в локальный master
git merge upstream/master
# (если нет конфликтов — автоматически завершится)

# 6. Залить обновлённый master в свой форк
git push origin master
Совет: После этого ваш форк полностью синхронизирован с оригиналом. Можно снова создавать ветки и вносить изменения.