W3docs

git push

On this page, you can find useful information about the git push command, its usage, the most common options, and important tips concerning it.

Определение

Команда git push загружает содержимое локального репозитория в удалённый репозиторий. Отправка — это противоположность выборки. Если git fetch импортирует содержимое в локальные ветки, то git push экспортирует его в удалённые ветки.

Использование git push

Команда git push обычно используется для публикации локальных изменений в центральном репозитории. После того как изменения внесены в локальный репозиторий, вы можете использовать git push, чтобы поделиться изменениями с другими членами команды. Команда git push — одна из команд, участвующих в процессе «синхронизации». Эти команды работают с удалёнными ветками, настроенными с помощью команды git remote. Коммиты загружаются с помощью git push, а скачиваются с помощью git fetch и git pull. После внесения изменений в обоих случаях для их объединения используется git merge.

Следующие диаграммы показывают, как локальная master-ветка опережает master-ветку центрального репозитория, и публикацию изменений с помощью вызова git push origin master.

git push

Распространённые параметры

git push <remote> <branch>Отправляет указанную ветку в <remote> с необходимыми коммитами, создавая удалённую ветку в целевом репозитории.
git push <remote> --forceПринудительно выполняет отправку, даже если это приводит к обновлению не fast-forward. Убедитесь, что никто не забрал эти коммиты, прежде чем использовать параметр --force.
git push <remote> --allОтправляет все локальные ветки в удалённый репозиторий.
git push <remote> --tagsОтправляет теги из локальных веток в удалённый репозиторий. Параметр --all не отправляет теги.

Как отправлять в bare-репозитории

Отправлять в репозитории, созданные с флагом --bare, очень безопасно, поскольку он не позволяет редактировать файлы и фиксировать изменения в этом репозитории. Рекомендуется создавать центральные репозитории как bare; в противном случае отправка в non-bare-репозиторий может перезаписать изменения.

Принудительная отправка

Git может отклонить ваш запрос на отправку, если история центрального репозитория не совпадает с локальной. В таких случаях следует забрать удалённую ветку и слить её с локальным репозиторием, а затем отправить снова. Флаг --force перезаписывает удалённую ветку локальной, отбрасывая любые изменения upstream, которые ещё не были получены. Используйте принудительную отправку, когда общие коммиты неверны и исправляются с помощью git commit --amend или интерактивного rebase. Перед использованием параметра --force убедитесь, что никто не забрал эти коммиты. Интерактивный rebase — также хороший способ привести коммиты в порядок перед публикацией. Команда git commit --amend обновляет предыдущий коммит. Когда коммит изменён, git push завершится ошибкой, потому что Git будет считать изменённый коммит и удалённый коммит разошедшимся содержимым. В этом случае для отправки изменённого коммита нужно использовать --force.

git push --force

# make changes to a repo and git add
git commit --amend
# update the existing commit message
git push --force origin master

Как удалить удалённую ветку

Вот пример удаления удалённой ветки. branch_name, предварённый двоеточием в git push, удалит удалённую ветку:

delete remote branch, git push

git branch -D branch_name
git push origin :branch_name

Команда git push origin :branch_name удаляет указанную ветку (branch_name) из удалённого репозитория (origin), отправляя в неё пустую ссылку.

Вот как это работает:

  1. git push: отправляет изменения из вашего локального репозитория Git в удалённый репозиторий
  2. origin: имя удалённого репозитория
  3. :branch_name: refspec, представляющий пустую ссылку, фактически удаляющую указанную ветку из удалённого репозитория

Итак, когда вы выполняете git push origin :branch_name, Git удалит ветку branch_name из удалённого репозитория origin.

Обратите внимание, что эта команда может быть опасной при неправильном использовании, поскольку она удалит ветку без какого-либо подтверждения или возможности восстановления. Обязательно дважды проверьте имя ветки и убедитесь, что вы действительно хотите удалить её, прежде чем выполнять команду.

Используйте флаг -u при первой отправке ветки

Когда у вас есть локальная ветка и вы хотите впервые отправить её в удалённый репозиторий, следует указать, какую именно ветку удалённого репозитория вы имеете в виду. В Git флаг -u используется с командой git push для задания upstream-ветки для текущей ветки. Когда вы используете флаг -u, Git создаёт связь между вашей локальной веткой и удалённой веткой. Эта связь полезна для упрощения команд git pull и git push в будущем, поскольку позволяет Git запомнить, какая удалённая ветка соответствует вашей локальной ветке.

Флаг -u — это сокращение от --set-upstream. Обычно при использовании этого флага вы увидите такой вариант:

Use -u flag for the first push on a branch

git push -u origin your-branch-name

Примеры некоторых наиболее часто используемых флагов:

Вот несколько примеров того, как использовать некоторые флаги git push:

Флаг -f:


git push -f origin master

Это принудительно отправит локальную ветку master в удалённый репозиторий origin, перезаписав любые изменения, которые могли быть внесены в ветку master в удалённом репозитории. Используйте этот флаг с осторожностью, так как он может вызвать проблемы, если над одной и той же веткой работают несколько человек.

Флаг --tags:


git push --tags origin

Это отправит все теги в удалённый репозиторий origin. Теги используются для обозначения важных точек в истории вашего проекта, таких как релизы или вехи.

Флаг --all:


git push --all origin

Это отправит все локальные ветки в удалённый репозиторий origin.

Флаг --dry-run:


git push --dry-run origin master

Это имитирует отправку в ветку master удалённого репозитория origin, фактически ничего не отправляя. Это может быть полезно для тестирования и проверки того, какие изменения будут отправлены, прежде чем действительно их отправлять.

Флаг --force-with-lease:


git push --force-with-lease origin master

Это принудительно отправит локальную ветку master в удалённый репозиторий origin, при этом гарантируя, что вы не перезапишете изменения, которые могли быть внесены в ветку master в удалённом репозитории с момента вашей последней загрузки. Это более безопасная альтернатива использованию флага -f.

Практика

Практика

Какие утверждения верны относительно команды 'git push'?