Что именно делает "у"? "git push -u origin master" против "git push origin master" - PullRequest
272 голосов
/ 18 апреля 2011

Я очевидно ужасен в использовании git, несмотря на все мои попытки понять это.

С kernel.org для git push:

-u

- установленный выше по потоку

Для каждой ветки, которая обновлена ​​или успешно отправлена, добавьте ссылку вверх по течению (отслеживание), используемую git-pull (1) без аргументов и другими командами. Для получения дополнительной информации см. branch.<name>.merge в git-config (1).

Вот branch.<name>.merge из git config:

branch.<name>.merge

Определяет вместе с branch.<name>.remote восходящую ветвь для данной ветки. Он сообщает git fetch / git pull, какую ветку объединять, а также может влиять на git push (см. Push.default). Когда в ветке <name>, он говорит git fetch, что refspec по умолчанию должен быть помечен для объединения в FETCH_HEAD. Значение обрабатывается так же, как удаленная часть refspec, и должно совпадать с ref, который выбирается с пульта, заданного "branch.<name>.remote". Информация о слиянии используется git pull (который сначала вызывает git fetch) для поиска ветки по умолчанию для слияния. Без этой опции git pull по умолчанию объединяет первую выбранную ссылку. Укажите несколько значений, чтобы получить слияние осьминога. Если вы хотите настроить git pull таким образом, чтобы он сливался с <name> из другой ветви в локальном репозитории, вы можете указать branch.<name>.merge на нужную ветку и использовать специальные настройки. (период) для branch.<name>.remote.

Я успешно настроил удаленный репозиторий с помощью github и успешно отправил свой первый коммит в него:

git push -u origin master

Затем я невольно успешно отправил свой второй коммит в мой удаленный репозиторий, используя:

git commit -m '[...]'

Однако, неправильно подумав, что мне придется снова нажать origin на *1040*, я запустил:

# note: no -u
git push origin master

Что это сделало? Похоже, это никак не повлияло. Я "отменить" git push -u origin master?

Ответы [ 4 ]

287 голосов
/ 18 апреля 2011

Ключ "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 после этого).
69 голосов
/ 15 апреля 2013
git push -u origin master

То же, что и

git push origin master ; git branch --set-upstream master origin/master

Сделайте последнее утверждение, если вы забудете -u!

Или Вы можете форсировать это:

git config branch.master.remote origin
git config branch.master.merge refs/heads/master

Если вы позволите команде выполнить, если для вас она выберет ваши ошибки, например, если вы набрали несуществующую ветку или не набрали git remote add, хотя это может быть тем, что вы хотите:).

29 голосов
/ 28 августа 2018

Проще говоря:

Технически, флаг -u добавляет ссылку отслеживания на вышестоящий сервер, на который вы нажимаете.

Здесь важно то, что это позволяет вам делать git pull без предоставления дополнительных аргументов.Например, когда вы наберете git push -u origin master, вы сможете позже позвонить git pull, и git узнает, что вы на самом деле имели в виду git pull origin master.

В противном случае вам придется вводить всю команду.

0 голосов
/ 08 февраля 2016

Все необходимые команды git bash для загрузки и загрузки в Github:

git status 
git pull
git add filefullpath

git commit -m "comments for checkin file" 
git push origin branch/master
git remote -v 
git log -2 

Если вы хотите отредактировать файл, то:

edit filename.* 

Для просмотра всех веток и их коммитов:

git show-branch
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...