Что именно делает "u"? "git push -u origin master" vs "git нажать начальный мастер"

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

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

git push -u origin master

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

git commit -m '[...]'

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

# note: no -u
git push origin master

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

Ответ 1

Ключ "без аргументов git -pull". Когда вы делаете git pull из ветки, не указывая источник удаленного или ветки, git смотрит на параметр branch.<name>.merge, чтобы узнать, куда его тянуть. git push -u устанавливает эту информацию для ветки, которую вы нажимаете.

Чтобы увидеть разницу, используйте новую пустую ветвь:

$ git checkout -b test

Сначала мы нажимаем < <24 > :

$ 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 значение конфигурации upstream.
  • git push -u <remote> HEAD будет вытолкнуть текущую ветку на ветку с таким же именем на <remote> (а также настроить отслеживание, чтобы вы могли сделать git push после этого).

Ответ 2

 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, хотя это может быть то, что вы хотите:).

Ответ 3

Все необходимые команды 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