Ключ "git-pull" без аргументов.Когда вы делаете git pull
из ветви, не указывая удаленный источник или ветвь, git просматривает настройку branch.<name>.merge
, чтобы узнать, откуда взять.git push -u
устанавливает эту информацию для ветви, которую вы нажимаете.
Чтобы увидеть разницу, давайте используем новую пустую ветку:
$ git checkout -b test
Сначала мы нажимаем без -u
:
$ git push origin test
$ git pull
You asked me to pull without telling me which branch you
want to merge with, and 'branch.test.merge' in
your configuration file does not tell me, either. Please
specify which branch you want to use on the command line and
try again (e.g. 'git pull <repository> <refspec>').
See git-pull(1) for details.
If you often merge with the same branch, you may want to
use something like the following in your configuration file:
[branch "test"]
remote = <nickname>
merge = <remote-ref>
[remote "<nickname>"]
url = <url>
fetch = <refspec>
See git-config(1) for details.
Теперь, если мы добавим -u
:
$ git push -u origin test
Branch test set up to track remote branch test from origin.
Everything up-to-date
$ git pull
Already up-to-date.
Обратите внимание, что информация об отслеживании была настроена так, что git pull
работает, как и ожидалось, без указания пульта или ветви.
Обновление: Бонусные советы:
- Как отмечает Марк в комментарии, помимо
git pull
этот параметр также влияет на поведение по умолчанию git push
.Если вы привыкли использовать -u
для захвата удаленной ветви, которую вы намереваетесь отслеживать, я рекомендую установить для push.default
config значение upstream
. git push -u <remote> HEAD
подтолкнет текущую ветку кветка с тем же именем на <remote>
(а также настроить отслеживание, чтобы вы могли сделать git push
после этого).