Что значит git push -u?

323

У меня есть две разные версии Git. В версии 1.6.2, git pushне имеет -uопции. Появляется только в версии 1.7.x.

Из документов, -uэто связано с переменной

branch.<name>.merge

в git config. Эта переменная описана ниже:

Defines, together with branch.<name>.remote, the upstream branch 
for the given branch. It tells git fetch/git pull which branch to merge.

Что такое восходящая ветка?

Фрэнки Рибери
источник
1
См. Также stackoverflow.com/questions/2739376/…
VonC

Ответы:

362

«Upstream» означает основной репо, из которого будут вытягивать другие люди, например, ваш репозиторий GitHub. Опция -u автоматически устанавливает этот апстрим для вас, связывая ваш репо с центральным. Таким образом, в будущем Git «знает», куда вы хотите нажать и куда вы хотите получить, так что вы можете использовать git pullили git pushбез аргументов. Немного вниз, эта статья объясняет и демонстрирует эту концепцию.

Рэйф Кеттлер
источник
19
Я вижу, что статья, на которую вы ссылаетесь, действительно указывает на это, но так как это что-то вроде недоработки, я думаю, что стоит отметить, что ветвь, на которую проталкивается git push , не зависит от конфигурации ветки восходящего направления, если вы не push.defaultустановили на tracking(или upstreamв более поздних версиях мерзавца).
Марк Лонгэйр
я не понимаю, почему Eclipse Egit предлагает оба?
HaveAGuess
23
@HaveAGuess Вероятно, по той же причине, по которой Eclipse также приносит страдания и отчаяние.
твиз
9

Это больше не актуально!

Push.default is unset; its implicit value has changed in
Git 2.0 from 'matching' to 'simple'. To squelch this message
and maintain the traditional behavior, use:

  git config --global push.default matching

To squelch this message and adopt the new behavior now, use:

  git config --global push.default simple

When push.default is set to 'matching', git will push local branches
to the remote branches that already exist with the same name.

Since Git 2.0, Git defaults to the more conservative 'simple'
behavior, which only pushes the current branch to the corresponding
remote branch that 'git pull' uses to update the current branch.
Питер Пайпер
источник
1
Но что означает флаг -uсейчас? GitHub по-прежнему рекомендует использовать этот флаг при создании нового репо ...
Жан Поль
8
@JeanPaul - опция -u выполняет следующие действия: для каждой ветки, которая обновлена ​​или успешно отправлена, добавьте ссылку вверх по течению (отслеживание), используемую git-pull без аргументов и другими командами. Итак, после нажатия на вашу локальную ветку с параметром -u, эта локальная ветка будет автоматически связана с удаленной веткой, и вы можете использовать git pull без каких-либо аргументов.
Питер Пайпер