Git push
Команда git push
используется для выгрузки содержимого локального репозитория в удаленный репозиторий. Она позволяет передать коммиты из локального репозитория в удаленный. Эта команда симметрична git fetch: при извлечении с помощью fetch коммиты импортируются в локальные ветки, а при публикации с помощью push происходит экспорт в удаленные ветки. Настроить удаленные ветки можно с помощью git remote. Команда push может перезаписать изменения, поэтому при ее использовании следует соблюдать осторожность. Эти проблемы обсуждаются ниже.
Использование git push
git push <remote> <branch>
Так выполняется публикация указанной ветки вместе со всеми необходимыми коммитами и внутренними объектами. Эта команда создает локальную ветку в репозитории назначения. Чтобы предотвратить перезапись коммитов, система Git не позволит опубликовать данные, если в репозитории назначения нельзя выполнить ускоренное слияние.
git push <remote> --force
Аналогично приведенной выше команде, однако данные будут опубликованы принудительно, даже если нельзя выполнить ускоренное слияние. Не используйте флаг --force
, если вы не уверены в своих действиях.
Публикация всех локальных веток в указанном удаленном репозитории.
git push <remote> --tags
![Окно консоли](https://wac-cdn.atlassian.com/dam/jcr:7816f6da-4c53-46c3-8df3-c125249a4f87/collaborating-workflows-cropped.png?cdnVersion=1880)
Связанные материалы
Расширенный журнал Git
![Логотип Bitbucket](https://wac-cdn.atlassian.com/dam/jcr:03116c1f-27e5-4a82-9b9b-806786578fb2/logos-bitbucket-icon-gradient-blue-121x109@2x.png?cdnVersion=1880)
СМ. РЕШЕНИЕ
Изучите Git с помощью Bitbucket Cloud
При публикации ветки или использовании опции --all
теги не публикуются автоматически. Флаг --tags
отправляет все локальные теги в удаленный репозиторий.
Обсуждение git push
Команда git push
чаще всего используется для публикации выгружаемых локальных изменений в центральном репозитории. Для того чтобы поделиться изменениями, внесенными в локальный репозиторий, с удаленными участниками команды, необходимо выполнить команду push.
На рисунке выше показано, что происходит, когда ваша локальная ветка main
изменяет предыдущие коммиты ветки main
центрального репозитория и вы публикуете изменения с помощью команды git push origin main
. Обратите внимание, что команда git push
по сути аналогична команде git merge main
, запущенной из удаленного репозитория.
Git push и синхронизация
Команда git push
— это один из многих компонентов, которые используются в общем процессе синхронизации в Git. Команды синхронизации работают с удаленными ветками, которые настраиваются с помощью git remote. Команду git push
можно рассматривать как команду выгрузки, а git fetch и git pull — как команды загрузки (скачивания). После того как наборы изменений перемещены посредством загрузки или выгрузки, в месте назначения можно интегрировать изменения, выполнив их слияние командой git merge.
Публикация в чистые репозитории
В настоящее время в качестве центрального исходного репозитория Git часто используют удаленно размещенный чистый (--bare
) репозиторий. Этот исходный репозиторий (origin) размещается у надежного стороннего поставщика, например в Bitbucket. Поскольку при публикации нарушается структура удаленных веток, наиболее безопасный и распространенный вариант — это публикация в репозитории, созданном с флагом --bare
. Чистые репозитории не имеют рабочего каталога, поэтому публикация не может изменить его содержимое. Подробнее о создании чистых репозиториев см. в документации по команде git init.
Принудительная публикация
Git предотвращает перезапись истории центрального репозитория, отклоняя push-запросы, если нельзя выполнить их ускоренное слияние. Так, если история удаленного репозитория отличается от вашей истории, необходимо загрузить удаленную ветку командой pull и выполнить ее слияние с локальной веткой командой merge, а затем попробовать выполнить команду push еще раз. Это похоже на то, как в SVN необходимо синхронизироваться с центральным репозиторием с помощью команды svn update
перед тем, как сделать коммит набора изменений.
Флаг --force
отменяет это поведение и подгоняет ветку удаленного репозитория под вашу локальную ветку, удаляя любые вышестоящие изменения, которые могли быть внесены с момента последнего выполнения вами команды pull. Принудительное использование команды push оправдано лишь в том случае, когда вы понимаете, что только что опубликованные вами коммиты были не совсем правильными и вы исправили их с помощью команды git commit --amend
или интерактивного перебазирования. При этом прежде, чем использовать опцию --force
, вы должны быть абсолютно уверены в том, что никто из участников вашей команды не забирал эти коммиты с помощью команды pull.
Примеры
Команда git push по умолчанию
В следующем примере рассматривается один из стандартных способов публикации локальных изменений в центральном репозитории. Сначала проверяется актуальность вашей локальной основной ветки. Для этого извлекается копия центрального репозитория, после чего поверх нее перебазируются ваши изменения. Кстати, с помощью интерактивного перебазирования можно удобно очистить коммиты перед тем, как делиться ими. Затем все коммиты вашей локальной основной ветки отправляются в центральный репозиторий с помощью команды git push
.
git checkout main
git fetch origin main
git rebase -i origin/main
# Squash commits, fix up commit messages etc.
git push origin main
Мы убедились в том, что локальная основная ветка включает все актуальные изменения, поэтому слияние должно пройти в упрощенном режиме, а команда git push
не должна сообщать о каких-либо описанных выше проблемах, связанных с невозможностью выполнения такого слияния.
Принудительная команда push при исправлении коммитов
Команда git commit имеет параметр --amend
, который позволяет обновить предыдущий коммит. В коммиты часто вносятся исправления, чтобы обновить комментарий к коммиту или добавить новые изменения. Если коммит был исправлен, то при выполнении команды git push
произойдет сбой, так как система Git воспримет исправленный коммит и коммит в удаленном репозитории как отличающееся содержимое. Параметр --force
позволит выполнить команду push и опубликовать измененный коммит.
# make changes to a repo and git add
git commit --amend
# update the existing commit message
git push --force origin main
Предполагается, что приведенный выше пример выполняется в существующем репозитории с историей коммитов. Команда git commit --amend
используется для обновления предыдущего коммита. Затем исправленный коммит принудительно публикуется с помощью команды push с параметром --force
.
Стирание удаленной ветки или тега
Иногда ветки необходимо чистить для наведения порядка. Чтобы полностью стереть ветку, ее необходимо стереть как в локальном репозитории, так и в удаленном.
git branch -D branch_name
git push origin :branch_name
Первая команда сотрет локальную ветку с именем branch_name. Если в команде git push
перед именем ветки поставить двоеточие, будет стерта удаленная ветка.
Поделитесь этой статьей
Следующая тема
Рекомендуемые статьи
Добавьте эти ресурсы в закладки, чтобы изучить типы команд DevOps или получать регулярные обновления по DevOps в Atlassian.
![Люди сотрудничают друг с другом, используя стену со множеством инструментов](https://wac-cdn.atlassian.com/dam/jcr:2642fbab-a771-4961-9648-806c2fff25e5/bitbucket-blog-resized.png?cdnVersion=1880)
Блог Bitbucket
![Рисунок: DevOps](https://wac-cdn.atlassian.com/dam/jcr:d1f1a28b-11fc-4e22-b6c8-d47832b39d53/devops-learning-path-resized.png?cdnVersion=1880)
Образовательные программы DevOps
![Демонстрация функций в демо-зале с участием экспертов Atlassian](https://wac-cdn.atlassian.com/dam/jcr:73c6bd92-448f-4ae7-a6c1-5f4695f78692/demo-den-resized.png?cdnVersion=1880)