В чем отличие между git push -u origin master и git push origin master? Зачем ключ -u для команды git push?
Что хочу получить объяснение: в каком случаи ключ -u необходим?
- Вопрос задан более трёх лет назад
- 45449 просмотров
Комментировать
Решения вопроса 1
В том случае, если ветка master (или branch_name) не является отслеживаемой веткой origin/master (или origin/branch_name), а вы хотите сделать её таковой.
Выполнив команду git push -u origin master вы устанавливаете связь между той веткой, в которой вы находитесь и веткой master на удалённом сервере. Команду требуется выполнить единожды, чтобы потом можно было отправлять/принимать изменения лишь выполняя git push из ветки без указания всяких алиасов для сервера и удалённых веток. Это сделано для удобства.
Ответ написан более трёх лет назад
Нравится 39 2 комментария

Блин, круто, а я кучу времени писал push origin ‘brunch name’

Отслеживаемые ветки — это локальные ветки, которые напрямую связаны с удалённой веткой. Если, находясь на отслеживаемой ветке, вы наберёте git push , Git уже будет знать, на какой сервер и в какую ветку отправлять изменения. (блинк)
Каково назначение ключа `-u` при git push?
Ответы в английской версии StackOverflow на аналогичный вопрос — stackoverflow.com/questions/5697750/… — Вам понятны? Спасибо.
1 мар 2016 в 9:49
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
С ключом -u (полный вариант —set-upstream ) вы создаёте (если ещё не существует) в удалённом репозитории ветку, соответствующую вашей локальной и связываете их:
- В remote/branchname будет производиться push в локальную ветку branchname
- Из remote/branchname будет производиться pull в локальную ветку branchname
Для master это актуально, только если вы пушите в пустой репозиторий. Если клонировали — то соответствие ветвей уже настроено. А вот как только вы создадите новую локальную ветвь и захотите её запушить на remote, вам понадобится ключ -u .
# есть у нас локальная ветка git checkout -b mybranch # Создаем ветку на remote git push -u origin mybranch # Можно выбрать другое имя для создаваемой ветки на remote. git push -u origin mybranch_with_other_name
23 команды Git, которые должен знать каждый разработчик
Перед вами небольшая статья-шпаргалка, которая включает в себя команды удобные, но не всем знакомые команды Git, которые могут стать вашими постоянными спутниками в разработке.
Вести разработку, кстати, удобно в нашем кластере Kubernetes.
1. git init
Эта команда используется для инициализации проекта как репозитория git.
2. git clone
Эта команда клонирует репозиторий в новую директорию.
git config — это удобная функция, которая используется для настройки значений конфигурации Git на глобальном и локальном уровнях проекта. Примеры команд:
git config —local user.name «Name»
git config —global user.name «Name»
Если надо скопировать только файлы:
git clone —depth=1 git://someserver/somerepo dirformynewrepo
3. git remote add
Эта команда используется для добавления или подключения к удаленному репозиторию.
4. git remote -v
Эта команда используется для просмотра подключенных удаленных репозиториев.
5. git status
Эта команда используется для просмотра статуса файлов в вашем локальном репозитории. Отслеживаются ли файлы? Не отслеживается? Изменены ли они?
Пример: git add index.html
git add index.html style.css style.scss
Эта команда переносит все новые и измененные файлы в раздел проиндексированных файлов
Эта команда используется для индексирования ВСЕХ неустановленных файлов.
для конкретного файла
7. git reset
Эта команда используется для мягкой или жёсткой отмены изменений, позволяет сбросить состояние проекта до нужного коммита. Например.
отмена неотправленного коммита: git reset —hard HEAD^
отмена отправленного коммита ( возврат к состояние коммита 7880ae2 )
git reset —hard f7880ae2
git push origin -f
8. git commit
Эта команда совершает коммит — «закрепляет» промежуточные результаты.
git commit -m “Text message”
Пример: git commit -m «added navigation bar»
Команда -m позволяет указать commit message без обращения к редактору
git commit —amend
Команда —amend вносит в предыдущий коммит изменения, которые подготовлены к коммиту. Используется и для редактирования предыдущего commit message, если в нём допущены ошибки.
9. git push -u origin
Ключ -u (полный вариант —set-upstream ) создаёт в удалённом репозитории ветку, соответствующую локальной и связывает их.
Пример: git push -u origin master
Эта команда используется для отправки закоммиченных файлов в удаленный репозиторий (также известный как GitHub) в указанной ветке. Используйте эту команду, когда вы впервые отправляете файлы в удаленный репозиторий. Он зафиксирует место, куда вы отправляете эти файлы. И в следующий раз можно будет использовать команду git push.
10. git fetch
Эта команда используется для получения самой последней версии вашего локального репозитория. Загружает коммиты, файлы и ссылки из удаленного репозитория в ваш локальный репозиторий.
Бесплатный тестовый доступ к облаку на 30 днейПолучить
11. git pull
Эта команда используется для извлечения только что полученной информации и ее загрузки в локальный репозиторий. git pull запускает немедленное обновление локального репозитория.
12. git branch Эта команда используется для создания, просмотра переименования и удаления ветки, на которой вы сейчас находитесь.
Эта команда используется для предварительного просмотра всех веток в удаленном репозитории.
Эта команда используется для предварительного просмотра всех веток на сервере.
13. git checkout
Пример: git checkout master или git checkout develop
Эта команда используется для переключения на ветки, которые вы уже посещали ранее.
git checkout — ещё один вариант использования
14. git merge
Эта команда используется для объединения двух веток. Для этого укажите ветку, которую вы хотите унаследовать изменения. И имя ветки, которое вы будете использовать вместе с этой командой, — это ветка, которая предоставит изменения.
Пример: git merge develop
Здесь основная ветка наследует код из ветки разработки.
15. git merge — abort
Эта команда используется для отмены слияния.
Если нет ошибок, слияния будут успешными. Следовательно, это прерывание можно использовать только в ситуациях, когда слияние не удалось. Как понять, что нужно использовать эту команду? Ваш терминал скажет, что слияние не удалось. Он также может предложить вам исправить конфликты слияния.
Вот ещё один признак: ~/NextCloud/Documents/Web Projects/Cloud4Y (master)
Посмотрите в самый конец строки. В скобках написано (master). Это потому, что мы находимся в основной ветке. Если вы находитесь в ветке разработки, это будет означать (develop). Если смерджить не получилось, появится надпись (master|merging) или что-то в этом роде.
git merge -X theirs
Пример: git merge -X theirs develop
Эта команда используется для объединения двух веток. И если есть конфликты слияния, эта команда просто предположит, что вы предпочитаете изменения, сделанные в указанной ветке (а не в текущей).
16. git reset — hard HEAD
Эта команда удалит все изменения, внесенные вами в ваш локальный репозиторий, и обновит его до последней версии, которая была закоммичена на GitHub.
17. git reset HEAD^
Эта команда перемещает текущую ветку назад на два коммита, эффективно удаляя два снапшота, которые мы только что создали, из истории проекта. Он отменяет случайное закоммичивание и сохраняет изменения.
18. git clean -f
Эта команда используется для удаления неотслеживаемых файлов из вашего локального репозитория.
Эта команда используется для удаления неотслеживаемых директорий в вашем локальном репозитории. Вы также можете объединить его с git clean -fd, чтобы сделать и то, и другое.
19. git rm -r — cached
Пример: git rm -r —cached config.js
Эта команда используется для удаления файла из удаленного репозитория (GitHub), не удаляя его в локальном репозитории.
20. git bisect
Эта команда используется для обнаружения коммита, вызвавшего ошибку в коде. Так проще отследить коммит, где код работает и выявить проблемный коммит.
21. git diff
git diff — частое использование
Эта команда используется сравнения изменений.
22. git rebase
Полезно, если вы работали с веткой, но затем вам нужно объединить изменения, сделанные в этой ветке, с другой. С помощью git rebase вы можете «переместить» свою ветку поверх последней версии. Это также полезно, если команда следует общепринятым соглашениям о коммитах, таким как объединение коммитов вместе или разделение «больших» коммитов на «меньшие». Это используется в основном для «реорганизации» ваших коммитов.
git rebase -i HEAD~N
Склеить коммиты, переписав историю с момента HEAD~N, т.е. с того, что было N коммитов назад. -i — означает в интерактивном режиме.
23. git stash
Эта команда используется для сохранения неподтверждённых изменений в отдельном хранилище, чтобы можно было вернуться к ним позже. Сами файлы возвращаются к исходному состоянию. Команда полезна, когда вы работаете над одной веткой, хотите переключиться на другую, но вы ещё не готовы сделать коммит в текущей ветке. Таким образом, вы прячете изменения в коде, переключаетесь на другую ветку, возвращаетесь к исходной ветке, а затем разархивируете свои изменения.
git stash pop позволяет применить ранее отложенные изменения.
Что такое git push и как его использовать
В инструкции рассказываем о наиболее частых сценариях использования git push.
Эта инструкция — часть курса «Введение в Git».
Смотреть весь курс
Введение
Команда Git push позволяет отправлять локальную ветку на удаленный репозиторий. Она помогает разработчикам синхронизироваться в команде, а именно отправляет проделанные изменения. Если программист работает один, то пуш позволяет хранить код в облаке, например github, gitlab и не только, избавляя от риска потери данных на компьютере.
Дополнительно для синхронизации еще используют git pull для получения изменений с сервера и git remote, чтобы получить список удаленных подключений к репозиторию.
В этой инструкции мы расскажем, как запушить в удаленный git репозиторий. В статье под «пушем» будем подразумевать git push.
Отправка изменений в чистый репозиторий
Перед пушем надо связать локальный и удаленный репозитории. Делается это при помощи команды:
git remote add link
Вместо repository_name нужно дать имя удаленному репозиторию. Далее в инструкции вместо этого параметра мы будем использовать origin, так как чаще всего используют это имя.
Вместо link — ссылка на удаленный репозиторий, она может выглядеть по-разному в зависимости от того используется ssh или https.
Для ssh, который обязателен для github и gitlab, потребуются сделать дополнительные манипуляции для создания ssh-ключа. Соответствующие инструкции есть на этих ресурсах.
Отправка изменений
Перед пушем надо зафиксировать текущие изменения, то есть сделать git commit.
Далее для отправки в терминале пишем:
git push origin
Вместо branch — имя ветки, которую надо отправить. Чаще всего используется master или main:
git push origin master
Такое каждый раз писать слишком громоздко, для этого придумали git push по умолчанию. Для этого единожды набираем предыдущую команду с флагом -u:
git push -u origin master
После этого можно писать более коротко, так как git запомнил, что пушить надо на сервер origin ветку под именем master:
git push
Таким образом, git позволяет запушить ветку в удаленный репозиторий. Чтобы через git добавить ветку в удаленный репозиторий, надо запушить существующую локальную ветку.
Дополнительные опции публикации
Отправка ветки на сервер в ветку с другим именем
Для того чтобы сделать git push в другую ветку, есть специальный синтаксис, где после имени ветки через двоеточие пишется имя удаленной ветки:
git push origin branch:server_branch
где branch – имя локальной ветки, server_branch – имя удаленной ветки на сервере.
Отправка всех веток на сервер
Вместо имени ветки пишем флаг —all:
git push origin --all
После этого все зафиксированные изменения в ветках отправятся в удаленный репозиторий.
Отправка текущей ветки
Удобный способ отправить текущую ветку с тем же именем на сервере.
git push origin HEAD
HEAD указывает на текущую ветку (current branch). Тем самым, не надо запоминать имя ветки, на которой вы находитесь.
Принудительная публикация (git push —force …)
При отправке может произойти ошибка публикации:
To github.com:example/test.git ! [rejected] master -> master (fetch first) error: не удалось отправить некоторые ссылки в «github.com:example/test.git»
Это так называемый git push rejected, он означает что пуш был отклонен. Правильнее всего — сделать то, что написано в подсказке к ошибке. Надо получить и смержить изменения, затем снова отправить.
Эта ошибка происходит, так как git проверяет, что новый коммит основан на предыдущих коммитах. Пока вы вносили изменения, кто-то мог запушить изменения того же, над чем вы работали. Поэтому git не может выполнить автоматическое слияние, ваш коммит был раньше и он не базируется на обновленных коммитах в удаленном репозиториие.
Флагом —force или сокращенной его версией -f отключается проверка коммитов и при необходимости выполняется перезапись истории.
git push --force
Нужно быть аккуратными с этой командой, так как она стирает работу других людей. Эта команда оправдана лишь изредка, например, если вы почти сразу внесли изменения коммита с помощью git commit —amend и запушили до того, как кто-то сделал git pull.
Принудительная публикация с параметром (git push —force-with-lease …)
Это более безопасный, но так же нерекомендуемый вариант вариант принудительного пушинга. Он не перезапишет работу в удаленной ветке, если в нее были добавлены коммиты от других людей.
git push --force-with-lease
Принудительная публикация с этим параметром чревата появлением git push rejected у других людей
Как пушить в PhpStorm
При первом открытии PhpStorm потребуется создать новый проект.
В открытом проекте в правом верхнем углу среды разработки располагаются наиболее часто используемые команды git, в том числе пушинга.
Синяя стрелка означает git pull, зеленая галочка — git commit, зеленая стрелка — git push. При нажатии на зеленую стрелку (горячие клавиши Ctrl+Alt+K или ⌥ ⌘ K) открывается диалоговое окно с информацией об изменениях и настроках отправки.
Незапушенные коммиты
Самый простой способ узнать про них при помощи команды:
git status
Вывод будет содержать имя текущей ветки и то, насколько она опережает версию сервера. Пример вывода:
On branch master Your branch is ahead of ‘origin/master’ by 1 commit. (use “git push” to publish your local commits)
Для более подробной информации можно использовать:
git log
Будет выведена история коммитов:
commit 0fcd9558b013f642a8c3b4a59a16a66de39c99bd (HEAD -> master) Author: Pavel Date: Sun Mar 27 18:57:14 2022 +0300 Local commit commit 289c650767d2c7c2e58486e27b8b3933c6442078 (origin/master, origin/HEAD) Author: Pavel Date: Fri Mar 25 19:41:47 2022 +0300 Pushed commit
В скобках пишется где и какой коммит расположен.
HEAD -> master означает что текущая ветка (current branch) — это master и это последний локальный коммит в ней.
В нижнем коммите в скобках origin/master означает, что это последний опубликованный коммит на сервере в ветке master, а origin/HEAD, что коммит расположен на ветке, которая совпадает с локальной веткой HEAD.
Как пушить теги
Для создания тегов используют git tag, а для их отправки:
git push origin
Вместо tag_name — имя тега, который надо удалить на сервере.
Также можно сделать отправку всех тегов:
git push --tags
Мы не рекомендуем выбирать этот способ, так как могут отправиться теги, которые были удалены на сервере.
Удаление ветки или тега на сервере
Чтобы удалить ветку на удаленном репозитории, используем уже привычную команду с флагом —delete:
git push --delete origin
remote_branch_or_tag_name — имя ветки или тега на сервере.
Для удаление локальной ветки:
git branch -d
А для удаления локального тега: