git push
Определение
Команда 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 <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), отправляя в неё пустую ссылку.
Вот как это работает:
git push: отправляет изменения из вашего локального репозитория Git в удалённый репозиторийorigin: имя удалённого репозитория: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'?