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