git remotes

git remote

Управление удалёнными репозиториями — добавление, удаление, просмотр и настройка

Описание

Команда git remote управляет набором отслеживаемых удалённых репозиториев. Удалённый репозиторий (remote) — это версия проекта, размещённая в интернете или в сети. Сотрудничество с другими разработчиками строится именно через remotes: изменения отправляются туда командой git push и получаются командой git fetch или git pull.

По умолчанию Git называет удалённый репозиторий origin — это соглашение, которое возникает при клонировании (git clone). В проекте может быть несколько remotes: например, origin — ваш форк на GitHub, а upstream — оригинальный репозиторий автора. Это стандартная схема при работе с open-source проектами.

git remote работает только с метаданными о подключениях — никакие данные при его вызове не передаются по сети. Чтобы синхронизировать данные, используйте git fetch, git pull или git push.

Синтаксис

git remote [-v | --verbose] git remote add <name> <url> git remote rename <old> <new> git remote remove <name> git remote set-url <name> <newurl> [<oldurl>] git remote get-url <name> git remote show <name> git remote prune <name> git remote update [<name>...] [--prune]

Без подкоманды и флагов git remote выводит список имён всех настроенных remotes. С флагом -v показывает также URL для fetch и push каждого remote. Подкоманды (add, remove, rename и т.д.) выполняют конкретные действия над удалёнными репозиториями.

Флаги и опции

Флаг / Подкоманда Описание
-v, --verbose Выводить URL для fetch и push рядом с именем remote. Используется вместе с git remote без подкоманды или с git remote show.
add <name> <url> Добавить новый удалённый репозиторий с именем <name> и адресом <url>. Имя будет доступно во всех командах, работающих с remotes.
rename <old> <new> Переименовать remote из <old> в <new>. Обновляет все tracking-ветки и конфиг автоматически.
remove <name> Удалить remote и все связанные с ним tracking-ветки и конфигурационные записи.
set-url <name> <url> Изменить URL существующего remote. Полезно при смене протокола (HTTPS → SSH) или переезде репозитория.
set-url --add Добавить дополнительный URL для push. Позволяет отправлять изменения в несколько репозиториев одной командой.
set-url --delete Удалить один из URL remote (если их несколько после использования --add).
get-url <name> Показать URL remote. С флагом --all выводит все URL (включая дополнительные для push).
show <name> Подробная информация: URL, tracking-ветки, статус (ahead/behind) для каждой ветки. Выполняет запрос к серверу.
prune <name> Удалить локальные tracking-ветки, которых больше нет на удалённом репозитории. С флагом --dry-run только покажет, что будет удалено.
update Загрузить обновления от всех (или указанных) remotes. Аналог запуска git fetch --all.

Паттерны использования

Просмотр всех remotes

# Только имена
git remote

# Имена + URL
git remote -v

# Подробно с состоянием веток
git remote show origin

Добавить upstream для форка

# После клонирования своего форка
git remote add upstream https://github.com/original/repo.git

# Проверить
git remote -v
# origin    https://github.com/you/repo.git (fetch)
# upstream  https://github.com/original/repo.git (fetch)

Сменить HTTPS на SSH

# Посмотреть текущий URL
git remote get-url origin

# Заменить на SSH
git remote set-url origin git@github.com:you/repo.git

# Проверить
git remote -v

Очистить устаревшие ветки

# Сначала посмотреть, что будет удалено
git remote prune origin --dry-run

# Применить очистку
git remote prune origin

# Или при fetch сразу
git fetch --prune

Push в два репозитория одновременно

# Добавить второй URL для push к origin
git remote set-url --add --push origin git@github.com:you/repo.git
git remote set-url --add --push origin git@gitlab.com:you/repo.git

# Теперь git push отправит в оба

Переименовать remote

# origin → github
git remote rename origin github

# Все tracking-ветки обновятся автоматически:
# origin/main → github/main

Советы и подводные камни

Совет: Всегда проверяйте remotes командой git remote -v перед первым push в новом клоне. Убедитесь, что origin указывает на нужный репозиторий — особенно если у вас несколько аккаунтов GitHub.
SSH vs HTTPS: SSH (git@github.com:user/repo.git) удобнее при регулярной работе — не нужно вводить пароль. HTTPS проще настроить и работает через корпоративные прокси. Переключиться можно в любой момент через git remote set-url.
Внимание: git remote remove удаляет все tracking-ветки этого remote из локального репозитория. Это не влияет на сам удалённый сервер, но локальные ссылки вида origin/main исчезнут. Восстановить их можно, снова добавив remote и выполнив git fetch.
Устаревшие ветки: После удаления веток на сервере их tracking-копии остаются локально. Периодически запускайте git fetch --prune или настройте автоматическую очистку: git config --global fetch.prune true.