GitHub -- Fork и upstream

Fork — личная копия чужого репозитория в твоём аккаунте GitHub; upstream — оригинальный репозиторий, от которого сделан fork.

Зачем нужно

Fork нужен для contribution в open source: нет прав пушить напрямую в чужой репозиторий, поэтому создаётся собственная копия, вносятся изменения, затем отправляется Pull Request в оригинал. Связь с upstream позволяет синхронизировать fork с новыми изменениями в оригинале.

Где используется

  • Contribution в open source проекты (Vue, React, любые npm-пакеты)
  • Доработка чужих библиотек под свои нужды без PR в оригинал
  • Работа с репозиторием организации без прямых прав на push

Основной контент

Схема работы

upstream (оригинал)          fork (твоя копия на GitHub)
github.com/vuejs/vue    →    github.com/yourname/vue
        ↑                             │
        │ Pull Request                ↓
        └──────────────────── local clone

Fork репозитория

  1. Открыть репозиторий на GitHub
  2. Кнопка Fork → выбрать свой аккаунт
  3. GitHub создаёт копию в твоём аккаунте

Локальная работа

# 1. Клонировать свой fork (не оригинал!)
git clone https://github.com/yourname/vue.git
cd vue

# 2. Добавить upstream как remote
git remote add upstream https://github.com/vuejs/vue.git

# 3. Проверить remotes
git remote -v
# origin    https://github.com/yourname/vue.git (fetch)
# origin    https://github.com/yourname/vue.git (push)
# upstream  https://github.com/vuejs/vue.git (fetch)
# upstream  https://github.com/vuejs/vue.git (push)

Синхронизация с upstream

# Получить изменения из оригинала
git fetch upstream

# Обновить свою main-ветку
git switch main
git merge upstream/main
# или через rebase для чистой истории:
git rebase upstream/main

# Запушить обновления в свой fork
git push origin main

Полный цикл contribution

# 1. Синхронизировать с upstream
git fetch upstream
git switch main
git merge upstream/main

# 2. Создать ветку для изменений
git switch -c fix/typo-in-readme

# 3. Внести изменения
# ... редактируй файлы ...
git add README.md
git commit -m "docs: исправить опечатку в README"

# 4. Запушить в свой fork
git push origin fix/typo-in-readme

# 5. Создать Pull Request на GitHub:
# yourname/vue:fix/typo-in-readme → vuejs/vue:main

Частые ошибки

  • Клонировать upstream вместо fork — нет прав на push в чужой репозиторий; клонируй свой fork (origin)
  • Не синхронизировать с upstream — fork отстаёт от оригинала, при PR будут конфликты
  • Пушить напрямую в main fork — создавай ветки для каждого изменения; main используй только для синхронизации с upstream
  • Путаница origin и upstreamorigin = твой fork, upstream = оригинал

Связанные темы

Ресурсы