Ошибка 1: Push в upstream вместо origin
После добавления upstream-remote некоторые случайно пушат изменения в оригинальный репозиторий вместо своего форка.
# НЕВЕРНО — если у вас нет прав на оригинальный репозиторий:
git push upstream feature_x # ошибка: Permission denied или rejected
# ВЕРНО — всегда пушить в свой форк (origin):
git push origin feature_x
Правило:
origin = ваш форк. upstream = оригинальный репозиторий. Пушить нужно только в origin. В upstream изменения попадают через PR.
Ошибка 2: PR в неверном направлении
При создании PR GitHub предлагает выбрать откуда и куда вы хотите влить изменения. Ошибка: указать неверный базовый репозиторий или ветку.
# Правильное направление PR (пример на GitHub):
# base repository: ORIGINAL_AUTHOR/repo (оригинал) <— base: main
# head repository: YOUR_USERNAME/repo (ваш форк) <— compare: feature_x
# Ошибка: выбрать base = ваш форк (PR внутри форка — не попадёт в оригинал)
Ошибка 3: Забыли синхронизировать форк
Если вы давно не обновляли форк от upstream, ваша ветка может отстать на много коммитов. При попытке создать PR GitHub покажет конфликты или отстание.
# РЕШЕНИЕ: обновить форк перед началом работы
git fetch upstream
git checkout master
git merge upstream/master
git push origin master
# Затем создать ветку от свежего master
git checkout -b new-feature
Ошибка 4: Коммит прямо в main/master форка
Удобно, но создаёт проблемы: при создании PR изменения от разных задач смешаются. Трудно разделить PR по задачам.
# НЕВЕРНО — коммитить прямо в main
git checkout main
# ... вносим изменения ...
git commit -m "Add feature"
git push origin main # PR будет содержать ВСЕ коммиты вашего main
# ВЕРНО — всегда работать в отдельной ветке
git checkout main
git pull
git checkout -b feature-add-thing
# ... вносим изменения ...
git commit -m "Add feature"
git push origin feature-add-thing
# PR будет содержать только коммиты этой ветки
Ошибка 5: Неинформативное название PR или коммита
Сообщения коммитов важны — они описывают историю вашего кода. Название PR с понятным описанием облегчает ревью.
# НЕВЕРНО
git commit -m "fix"
git commit -m "changes"
git commit -m "asdf"
# ВЕРНО
git commit -m "Fix null pointer in login form validation"
git commit -m "Add date field to README"
git commit -m "closes #9: implement temperature amplitude calculation"
Ошибка 6: Пробелы в имени ветки
# НЕВЕРНО — пробелы недопустимы в именах веток
git checkout -b "my feature branch" # ошибка
# ВЕРНО — используйте дефисы или нижнее подчёркивание
git checkout -b my-feature-branch
git checkout -b feature_x
git checkout -b GH-9-fix-login