# Отправка фиксаций в удаленный репозиторий

Используйте git push для отправки фиксаций в локальной ветви в удаленный репозиторий.

## Около `git push`

Команда `git push` принимает два аргумента:

* имя удаленного репозитория, например, `origin`;
* Имя ветви, например `main`

Например:

```shell
git push REMOTE-NAME BRANCH-NAME
```

Например, вы обычно выполняете команду `git push origin main` для отправки локальных изменений в веб-репозиторий.

## Переименование ветвей

Чтобы переименовать ветвь, используйте ту же команду `git push`, добавив к ней еще один аргумент: имя новой ветви. Например:

```shell
git push REMOTE-NAME LOCAL-BRANCH-NAME:REMOTE-BRANCH-NAME
```

`LOCAL-BRANCH-NAME` отправляется в `REMOTE-NAME`, но при этом переименовывается в `REMOTE-BRANCH-NAME`.

## Обработка ошибок не быстрого перемещения вперед

Если локальная копия репозитория не синхронизирована с вышестоящим репозиторием, в который выполняется отправка, вы получите следующее сообщение: `non-fast-forward updates were rejected`.
В таком случае перед отправкой локальных изменений необходимо извлечь или "получить" изменения из вышестоящего репозитория.

Дополнительные сведения об этой ошибке см. в разделе [Обработка ошибок не быстрого перемещения вперед](/ru/enterprise-server@3.22/get-started/using-git/dealing-with-non-fast-forward-errors).

## Отправка тегов

По умолчанию команда `git push` без дополнительных параметров отправляет все ветви, имена которых соответствуют именам удаленных ветвей.

Чтобы отправить отдельный тег, можно использовать ту же команду, что и для отправки ветви:

```shell
git push REMOTE-NAME TAG-NAME
```

Чтобы отправить все теги, можно ввести следующую команду:

```shell
git push REMOTE-NAME --tags
```

## Удаление удаленных ветви или тега

На первый взгляд синтаксис удаления ветви может показаться непонятным:

```shell
git push REMOTE-NAME :BRANCH-NAME
```

Обратите внимание на пробел, стоящий перед двоеточием. Эта команда напоминает ту, которая используется для переименования ветви. Тем не менее, она указывает Git *выполнить пустую отправку* в ветвь `BRANCH-NAME` в репозитории `REMOTE-NAME`. Таким образом, команда `git push` удаляет ветвь в удаленном репозитории.

## Удаленные репозитории и вилки

Возможно, вы уже знаете, что [вы можете «форкать» репозитории](https://guides.github.com/overviews/forking/) на GitHub.

При клонировании собственного репозитория вы предоставляете ему удаленный URL-адрес, который Git использует для получения и отправки обновлений. Для совместной работы с исходным репозиторием следует добавить в локальный клон Git новый удаленный URL-адрес (обычно называется `upstream`):

```shell
git remote add upstream THEIR_REMOTE_URL
```

Теперь вы можете получать обновления и ветви из *их* вилки:

```shell
git fetch upstream
# Grab the upstream remote's branches
> remote: Counting objects: 75, done.
> remote: Compressing objects: 100% (53/53), done.
> remote: Total 62 (delta 27), reused 44 (delta 9)
> Unpacking objects: 100% (62/62), done.
> From https://HOSTNAME/OCTOCAT/REPO
>  * [new branch]      main     -> upstream/main
```

Когда закончите с локальными изменениями, вы можете отправить локальную ветку в GitHub и [инициировать pull request](/ru/enterprise-server@3.22/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests).

Дополнительные сведения о работе с вилками см. в разделе [Синхронизация вилки](/ru/enterprise-server@3.22/pull-requests/collaborating-with-pull-requests/working-with-forks/syncing-a-fork).

## Дополнительные материалы

* [Глава "Удаленные репозитории" из книги "Pro Git"](https://git-scm.com/book/en/v2/Git-Basics-Working-with-Remotes)
* [Главная страница `git remote`](https://git-scm.com/docs/git-remote.html)
* [Памятка по GIT](/ru/enterprise-server@3.22/get-started/git-basics/git-cheatsheet)
* [Рабочие процессы Git](/ru/enterprise-server@3.22/get-started/git-basics/git-workflows)
* [Справочник по Git](https://guides.github.com/introduction/git-handbook/)