Git и GitHub: remote, push, pull, clone и fork

Удалённый репозиторий — что это

Remote — это ссылка на репозиторий, который находится не на твоём компьютере. GitHub, GitLab, Bitbucket, или собственный сервер — всё это remote.

Git хранит remote как псевдоним + URL:

origin → https://github.com/ivan/my-project.git
upstream → https://github.com/original/my-project.git

origin — стандартное имя основного remote. Никакой магии — просто конвенция.

git remote

git remote add origin URL      # добавить remote
git remote -v                  # показать все remote с URL
git remote remove origin       # удалить
git remote rename origin new   # переименовать

У одного репозитория может быть несколько remote. Типичная ситуация при работе с open source: origin — твой fork, upstream — оригинальный проект.

Tracking branches

После первого fetch или push Git создаёт tracking branches — локальные указатели на состояние удалённых веток:

origin/main  →  последний известный коммит на remote
main         →  твоя локальная ветка

origin/main не обновляется автоматически. Обновляется только при git fetch или git pull.

git log origin/main       # история remote ветки
git diff main origin/main # твои изменения vs remote

push и pull

git push

git push origin main          # отправить ветку main
git push -u origin main       # + запомнить upstream для этой ветки
git push                      # после -u: без аргументов

Rejected push — когда remote опережает твой local:

! [rejected] main -> main (non-fast-forward)

Решение: git pull (забрать изменения) → разрешить конфликты если есть → git push.

Никогда не делай git push --force на shared ветки. --force-with-lease — безопаснее, отклонит push если remote изменился.

git fetch и git pull

git fetch origin     # скачать, НЕ мержить в local
git pull origin main # fetch + merge (или rebase если настроено)

fetch безопаснее — ты видишь что пришло перед тем как мержить. pull удобнее, но мержит автоматически.

Лучшая практика:

git fetch origin
git log origin/main --oneline -10  # смотришь
git merge origin/main              # решаешь сам

git clone

git clone https://github.com/user/repo.git
git clone URL folder       # в конкретную папку
git clone --depth 1 URL    # shallow: только последний коммит

Clone делает всё за тебя:

  1. Копирует репозиторий с историей
  2. Настраивает origin → URL
  3. Создаёт tracking branch

После clone сразу можно работать — ничего не нужно настраивать.

Fork и Pull Request

Fork нужен когда у тебя нет прав пушить в репозиторий.

# 1. Fork на GitHub (кнопка)
# 2. Clone своего fork
git clone https://github.com/ТВОЙ/repo.git

# 3. Добавить upstream
git remote add upstream https://github.com/ОРИГИНАЛ/repo.git

# 4. Работать в ветке
git switch -c fix/my-fix
git commit -m "fix: ..."
git push origin fix/my-fix

# 5. Pull Request: твой fork → upstream

Обновление fork:

git fetch upstream
git merge upstream/main
git push origin main

SSH vs HTTPS

| | HTTPS | SSH | |---|---|---| | Настройка | Проще | Один раз настроить ключ | | Аутентификация | Токен при push | Автоматически по ключу | | Удобство | Нужно вводить/хранить токен | push/pull без паролей |

Для частой работы — SSH удобнее:

ssh-keygen -t ed25519 -C "email@example.com"
# Добавить ~/.ssh/id_ed25519.pub в GitHub Settings → SSH keys

Команды для ежедневной работы

git remote -v                   # список remote
git remote add origin URL       # добавить remote
git push -u origin main         # первый push ветки
git push                        # обычный push
git pull                        # fetch + merge
git fetch origin                # только скачать
git clone URL                   # клонировать
git remote add upstream URL     # добавить upstream
git fetch upstream              # обновить из upstream

Уроки модуля

Интерактивные уроки по теме
Удалённые репозитории: remote и fetch+90 XP →push и pull: синхронизация с remote+100 XP →clone и fork: работа с чужими репозиториями+110 XP →
Готов учиться интерактивно?

Двигай слайдеры и наблюдай как работает математика

Начать учиться →