Команда git push
выполняет отправку недавних коммитов c компьютера локального репозитория на сервер с удаленным репозиторием. Благодаря ей разработчики могут обновлять основную ветку, добавляя новые функции или внося изменения в уже существующие.
Кстати, это одна из четырех основных команд для управления удаленными репозиториями. Три другие — pull
, fetch
, remote
.
После серии коммитов с ключевыми изменениями нужно обновить кодовую базу в удаленном репозитории. Для этого есть две причины:
Чтобы команда push
работала, сперва нужно связать локальный репозиторий с удаленным.
git remote add repository link
Вместо repository
указывается название удаленного репозитория — оно может быть произвольным, т.к. используется только на локальной машине. Однако, чаще всего это просто origin
.
Вместо link
указывается ссылка на удаленный репозиторий. Ее вид зависит от протокола доступа — это может быть как HTTPS, так и SSH.
Помните, что перед отправкой обновлений в удаленный репозиторий все локальные изменения нужно зафиксировать командой git commit
.
Возможно, на данный момент у вас нет никаких изменений. Чтобы это узнать, воспользуйтесь git status
. Если неотправленные на сервер коммиты все-таки имеются, в консоли появится соответствующее сообщение:
Your branch is ahead of 'origin/master' by 3 commits.
В таком случае, свежие изменения необходимо «запушить»:
git push repository branch
Вместо repository
указывается название удаленного репозитория, а вместо branch
пишется имя ветки, которая будет отправлена. Если на сервере нет такой ветки, то она автоматически будет создана. Чаще всего основную ветку называют master
.
git push origin master
Кстати, краткая форма команды отправляет в удаленный репозиторий текущую (т.е. активную) ветку.
git push
Например, если текущей является master
, то на сервер отправится именно она. Поэтому всегда выполняйте проверку через git status
, чтобы убедиться, что вы находитесь в целевой ветке.
Кстати, ту же операцию можно выполнить, написав более длинную форму команды с указателем HEAD
, которые ссылается на активную ветку — таким образом не придется запоминать ее название.
git push origin HEAD
Если после отправки изменений проверить статус через git status
, то появится сообщение, что ветка полностью обновлена:
Your branch is up-to-date with 'origin/master'.
Иногда необходимо поместить локальную ветку в совершенно другую ветку удаленного репозитория. Чтобы это сделать, их названия последовательно указываются через двоеточие.
git push origin master:remote_branch
В данном случае master
— название локальной ветки, а remote_branch
— аналогичная ветка удаленного репозитория, но с другим именем. Как и с обычным пушем, если remote_branch
не существует — Git ее создаст. Если говорить проще, этот вариант команды переименовывает локальную ветку, но в удаленном репозитории.
Чтобы отправить сразу все ветки с несохраненными коммитами в удаленный репозиторий, достаточно указать флаг --all
вместо привычного имени.
git push origin --all
Git отправит свежие коммиты в соответствующие ветки удаленного репозитория — те, что имеют идентичные имена. Если какие-то из них не существуют, Git их создаст.
cloud
В некоторых случаях в удаленном репозитории невозможно выполнить быстрое слияние веток. Поэтому довольно часто ветку просто перезаписывают.
Однако, в целях безопасности Git не позволяет выполнять такую операцию по умолчанию. Например, если в удаленном репозитории есть более свежие коммиты сторонних разработчиков, сперва их необходимо загрузить с помощью pull
и выполнить слияние через merge
.
Итак, для принудительной перезаписи удаленной ветки к команде push
добавляется флаг --force
. После этого история коммитов из локального репозитория будет скопирована в удаленный, замещая при этом все предыдущие записи.
git push origin master --force
По этой причине флаг --force
требует особой осторожности — принудительная запись может удалить функции, которые были добавлены другими разработчиками. Поэтому использование этого флага считается нежелательным. Идти на такие меры следует только в самом крайнем случае.
Кстати, если предыдущий коммит локального репозитория был исправлен с помощью флага --amend
, сделать пуш не получится — исправленный коммит будет отличаться от коммита в удаленном репозитории.
Поэтому придется воспользоваться все тем же флагом --force
— исправленный коммит принудительно перезапишется в удаленный репозиторий.
Если в проекте используются теги для пометки версий кодовой базы, то может возникнуть необходимость отправить их в удаленный репозиторий. Дело в том, что Git самостоятельно не отправляет теги на удаленные сервера.
Поэтому, как и с обычными ветками, для этого используется команда git push
.
git push origin tagname
Вместо tagname
указывается имя тега. Например, если у вас есть тег v1.5
, показывающий версию продукта, то команда для его отправки в репозиторий будет выглядеть так:
git push origin v1.5
Как и с ветками, помощью флага --tags
в удаленный репозиторий можно отправить все теги сразу.
git push origin --tags
Теперь эти теги будут доступны любому, кто клонирует ваш репозиторий через git clone
или получает свежие обновления через git pull
.
Как ни странно, чтобы стереть ветку в удаленном репозитории, нужно выполнить тот же push
, но с другими параметрами.
Пишется все то же самое, как и в случае переименования ветки (т.е. отправки локальной ветки на сервер под другим именем), но без указания названия локальной ветки перед двоеточием.
git push origin :branch_name
Чтобы не запутаться в этой команде, можно представить, что вы отправляете пустоту (вы не указали название локальной ветки) в удаленную ветку, тем самым ее очищая.
Однако, начиная с версии Git v1.7.0 можно использовать флаг --delete
, после которого указывается имя удаленной ветки.
git push origin --delete branch_name
Удаление тега ничем не отличается от удаления ветки — вы просто указываете название тега. Работает как способ с двоеточием, так и флаг --delete
.
Кстати, Git допускает одновременное удаление сразу нескольких веток или тегов.
git push origin --delete branch_name1 branch_name2 branch_name3
Выгодные тарифы на облачные серверы
В этой статье были показаны основные варианты использования команды git push
. Большинство задач, связанных с отправкой данных на сервер, решается с помощью них, и только в редких случая разработчикам приходится прибегать к дополнительным флагам.
Разумеется, более подробную информацию о параметрах этой команды можно найти в официальной документации Git.