↓Перейти к содержанию
  1. Git: руководства и команды/

Форк репозитория в GitHub и GitLab

·8 минут·

Что такое форк репозитория #

Форк (англ. fork) — это полная копия репозитория, которая создаётся на сервере GitHub или GitLab и остаётся связана с оригинальным проектом. Когда вы форкуете чей-то репозиторий, вся история коммитов, все ветки и все файлы копируются в ваш аккаунт, и вы становитесь полноправным владельцем этой копии.

Полная копия репозитория в вашем аккаунте #

При создании форка GitHub или GitLab:

  • Копирует все коммиты из истории проекта
  • Копирует все существующие ветки
  • Копирует теги и релизы
  • Создаёт новый репозиторий в вашем аккаунте
  • Сохраняет связь с оригинальным репозиторием (upstream)

Вы можете работать с форком независимо: создавать ветки, пушить коммиты, удалять файлы — и всё это не повлияет на оригинальный проект.

Форк vs Clone: отличие #

Студенты и начинающие разработчики часто путают форк и клонирование. Это две совершенно разные операции:

Форк — это операция на сервере:

  • Выполняется через веб-интерфейс GitHub/GitLab
  • Создаёт новый удалённый репозиторий на сервере
  • Репозиторий связан с оригиналом (есть upstream)
  • Видна история форка на GitHub (fork badge)

Clone — это локальная операция:

  • Выполняется в терминале с помощью git clone
  • Создаёт копию репозитория на вашем компьютере
  • Может быть клон оригинального репо или клон форка
  • Подробнее читайте в статье /ru/git/git-clone/

Обычный сценарий: вы форкуете репозиторий на GitHub, а затем клонируете ваш форк на локальную машину.

Когда форкают репозиторий #

Форк используется в нескольких ситуациях:

Контрибьюция в open source: Если вы хотите внести правки в чужой проект, вы форкуете его, вносите изменения в своей копии, а затем создаёте Pull Request (или Merge Request на GitLab) для предложения своих изменений авторам.

Эксперименты без риска: Вы можете экспериментировать с кодом в своём форке, не опасаясь испортить оригинальный проект. Если что-то пойдёт не так, оригинал останется в целости.

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


Создание форка на GitHub #

Пошаговая инструкция #

  1. Откройте репозиторий на GitHub, который хотите форкнуть
  2. Нажмите кнопку Fork в правом верхнем углу страницы
  3. Вы увидите диалоговое окно, где можно выбрать:
    • Owner — в какой аккаунт создавать форк (ваш аккаунт, организация)
    • Repository name — имя форка (по умолчанию совпадает с оригиналом)
    • Description — описание форка (необязательно)

Опция копирования ветвей #

В диалоговом окне вы можете выбрать:

  • Copy the main branch only — форкнуть только главную ветку (по умолчанию)
  • Copy all branches — форкнуть все ветки из оригинального репо

Если оригинальный проект имеет несколько активных веток разработки (например, develop, staging, main), имеет смысл скопировать все ветки.

Что происходит при создании форка #

После нажатия кнопки Fork:

  1. GitHub создаёт точную копию репозитория в вашем аккаунте
  2. На странице форка отображается бадж “forked from ORIGINAL_OWNER/original-repo”
  3. Вы становитесь владельцем форка и можете управлять его настройками
  4. GitHub сохраняет связь между форком и оригиналом для синхронизации

Создание форка на GitLab #

Процесс создания форка на GitLab очень похож на GitHub:

  1. Откройте проект на GitLab
  2. Нажмите кнопку Fork (находится рядом с кнопкой Clone)
  3. В диалоговом окне выберите Namespace — куда создавать форк (ваш профиль или группа)
  4. Оставьте название проекта по умолчанию или измените его
  5. Нажмите Fork project

Отличия форка GitLab от GitHub #

  • В GitLab форк может быть создан с сохранением всех веток (по умолчанию копируются все)
  • GitLab использует термин Merge Request вместо Pull Request
  • Интерфейс синхронизации форка немного отличается
  • На странице форка отображается информация о связи с исходным проектом

Клонирование форка и настройка upstream #

После создания форка нужно клонировать его на локальную машину и настроить связь с оригинальным репозиторием.

Клонирование вашего форка #

# Клонировать ваш форк на локальную машину
git clone https://github.com/YOUR_USERNAME/forked-repo.git
cd forked-repo

Замените YOUR_USERNAME на ваше имя пользователя на GitHub и forked-repo на название вашего форка.

Добавление upstream #

После клонирования нужно добавить оригинальный репозиторий как “upstream”. Upstream — это удалённый репозиторий, из которого вы будете получать обновления.

# Добавить оригинальный репозиторий как upstream
git remote add upstream https://github.com/ORIGINAL_OWNER/original-repo.git

# Проверить, что оба remote добавлены
git remote -v

Команда git remote -v покажет вам оба удалённых репозитория:

origin    https://github.com/YOUR_USERNAME/forked-repo.git (fetch)
origin    https://github.com/YOUR_USERNAME/forked-repo.git (push)
upstream  https://github.com/ORIGINAL_OWNER/original-repo.git (fetch)
upstream  https://github.com/ORIGINAL_OWNER/original-repo.git (push)

Подробнее о remotes можно прочитать в статье /ru/git/git-remote-v/.

  • origin — ваш форк (вы можете пушить сюда)
  • upstream — оригинальный репозиторий (только для получения обновлений)

Синхронизация форка с оригиналом #

Со временем оригинальный репозиторий развивается, в него добавляются новые коммиты. Ваш форк может отставать от оригинала. Поэтому нужно периодически синхронизировать форк.

Способ 1: Синхронизация через командную строку #

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

# Переключиться на главную ветку (обычно main или master)
git switch main

# Слить изменения из upstream в вашу локальную ветку
git merge upstream/main

# Запушить обновлённую ветку в ваш форк
git push origin main

Эта последовательность команд:

  1. Загружает информацию об обновлениях в оригинальном репо
  2. Переходит на главную ветку
  3. Слизывает все новые коммиты из оригинала
  4. Отправляет обновления в ваш форк на GitHub

Способ 2: Синхронизация через веб-интерфейс GitHub #

GitHub предоставляет удобный способ синхронизировать форк без командной строки:

  1. Перейдите на страницу вашего форка
  2. Нажмите кнопку Sync fork (если она есть)
  3. Выберите Update branch

Этот способ применяет самый простой сценарий синхронизации.


Внесение изменений и создание Pull Request из форка #

Основной сценарий использования форка — это внесение изменений и предложение их авторам оригинального проекта через Pull Request.

Создание ветки для изменений #

# Убедитесь, что вы на главной ветке
git switch main

# Создайте новую ветку для ваших изменений
git switch -c fix/my-bugfix

# Или используйте старый синтаксис:
# git checkout -b fix/my-bugfix

Имя ветки должно быть描述ным и следовать соглашению вашего проекта (например, feature/new-feature, fix/bug-name, docs/update-readme).

Внесение изменений и коммиты #

# Внесите изменения в файлы
# Проверьте, какие файлы изменились
git status

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

# Создайте коммит с описанием
git commit -m "Fix: исправлена ошибка в обработке ввода"

# Можно добавить и залиться несколько коммитов перед пушем
git push origin fix/my-bugfix

Создание Pull Request на GitHub #

  1. Перейдите на страницу вашего форка на GitHub
  2. Вы увидите желтую полоску “Compare & pull request” с вашей веткой
  3. Нажмите эту кнопку (или найдите кнопку Pull requests в меню)
  4. Заполните форму Pull Request:
    • Title — короткое название (например, “Fix: исправлена ошибка в парсере”)
    • Description — подробное описание изменений
    • Commits — все ваши коммиты будут видны
    • Files changed — полный diff (различие между веткой и main)
  5. Нажмите Create pull request

После создания Pull Request авторы оригинального проекта получат уведомление и смогут просмотреть ваши изменения, оставить комментарии или принять ваш PR.


Форк на GitLab: создание Merge Request #

На GitLab процесс аналогичен, но используется терминология Merge Request вместо Pull Request.

Пошагово #

  1. Создайте форк на GitLab (как описано выше)
  2. Клонируйте форк: git clone https://gitlab.com/YOUR_USERNAME/forked-repo.git
  3. Добавьте upstream: git remote add upstream https://gitlab.com/ORIGINAL_OWNER/original-repo.git
  4. Создайте ветку для изменений: git switch -c feature/new-feature
  5. Внесите изменения и запушьте: git push origin feature/new-feature
  6. На странице форка в GitLab появится предложение создать Merge Request
  7. Нажмите Create merge request и заполните форму

Процесс практически идентичен GitHub, просто с другой терминологией.


Удаление форка #

Если форк больше не нужен, его можно удалить.

Удаление форка на GitHub #

  1. Перейдите на страницу форка
  2. Нажмите Settings (вкладка с шестёренкой)
  3. Прокрутите вниз до Danger Zone
  4. Нажмите Delete this repository
  5. Введите название репозитория для подтверждения
  6. Нажмите I understand the consequences, delete this repository

Удаление форка на GitLab #

  1. Откройте форк
  2. Перейдите в Settings → General
  3. Прокрутите до Advanced
  4. Нажмите Delete project
  5. Введите название проекта для подтверждения

Что происходит с Pull Request после удаления форка #

Если вы удалили форк, но есть активный Pull Request:

  • Pull Request останется видимым (но заметит, что форк удалён)
  • Авторы оригинального проекта смогут просмотреть ваш PR, но не смогут запушить изменения в ваш форк
  • Если PR ещё не был merged, он может остаться открытым

Лучше закрыть Pull Request перед удалением форка или дождаться его merge.


FAQ #

Что такое форк в GitHub? #

Форк — это полная копия репозитория, которая создаётся в вашем аккаунте на GitHub. Форк сохраняет историю и связь с оригинальным проектом. Вы можете независимо разрабатывать свою версию проекта и предлагать изменения авторам через Pull Request.

Чем форк отличается от клонирования? #

Форк создаётся на сервере GitHub/GitLab через веб-интерфейс и даёт вам полный контроль над копией репозитория на платформе. Клонирование создаёт локальную копию репозитория на вашем компьютере через команду git clone. Подробнее: /ru/git/git-clone/

Обычно вы сначала форкуете репозиторий на GitHub, а потом клонируете ваш форк на локальную машину.

Как синхронизировать форк с оригинальным репозиторием? #

Синхронизировать форк можно двумя способами:

  1. Через командную строку: git fetch upstream && git switch main && git merge upstream/main && git push origin main
  2. Через веб-интерфейс GitHub: кнопка “Sync fork” → “Update branch”

Синхронизация нужна, чтобы ваш форк получал обновления из оригинального проекта.

Как сделать форк на GitLab? #

На GitLab процесс аналогичен GitHub. Откройте проект, нажмите кнопку Fork, выберите namespace (ваш профиль или группу) и подтвердите создание. На GitLab форк копирует все ветки по умолчанию.

Можно ли сделать форк приватного репозитория? #

Нет, форк можно создать только для публичного репозитория. Если репозиторий приватный, вы не сможете его форкнуть. Однако если у вас есть доступ к приватному репозиторию, вы можете клонировать его локально.

Как удалить форк на GitHub? #

Перейдите в Settings вашего форка, прокрутите до Danger Zone и нажмите Delete this repository. Введите название репозитория для подтверждения. Удаление необратимо.


Дополнительные ресурсы #

Если вы новичок в системе контроля версий Git, рекомендуем прочитать:

  • /ru/git/kak-sozdat-repozitorij-github/ — как создать новый репозиторий на GitHub
  • /ru/git/github-vs-gitlab/ — сравнение GitHub и GitLab

Для более глубокого понимания работы с удалёнными репозиториями см. /ru/git/git-remote-v/.


Заключение #

Форкирование репозитория — это основной инструмент для внесения вклада в open source проекты. Процесс простой: создаёте форк, клонируете его, синхронизируете с оригиналом, вносите изменения и создаёте Pull Request.

На GitHub и GitLab этот процесс примерно одинаков, различаются только названия кнопок и терминология (Pull Request на GitHub, Merge Request на GitLab).

Главное помнить:

  • Форк создаётся на сервере
  • Clone создаётся локально
  • Upstream — это оригинальный репозиторий для синхронизации
  • Origin — это ваш форк
  • Синхронизируйте форк перед началом работы над PR

Удачи в контрибьютинге в open source!