Для версии TL; DR см. Von C ответ .
git remote add
добавляет remote . Remotes может иметь любое имя, которое вам нравится, хотя по соглашению origin
является первым, а upstream
часто вторым. Но обычно, если вы добавите второй пульт, он будет иметь другой URL, а не тот же URL. Вам нужно только более одного пульта, если вы говорите с несколькими различными Git репозиториями, каждый с разными URL.
Смущает, что пульт с именем upstream
(если он у вас есть) не является восходящим, он просто удаленный.
Термин в восходящем направлении , когда применяется к имени ветви, относится к тому, что внутренне является установкой из двух частей (как Von C сказал ) , Каждое имя ветви, такое как master
или feature
, может иметь одно восходящее или не иметь восходящее. Обычно восходящий поток master
будет origin/master
, а восходящий feature
будет origin/feature
. Если у вас было несколько пультов, и вы назвали второй upstream
, вы могли бы установить восходящий поток branchX
на upstream/branchX
.
Итак: восходящий поток ветви другое имя, обычно начинающееся с имени remote . Git использует эту настройку для запоминания «вот откуда я получаю / извлекаю» и «туда, куда я направляюсь sh». Это имя должно действительно существовать , хотя, и вот тут все действительно запутано.
Поэтому я создал новую ветку, взятую у мастера
git checkout -b sample-branch master
Switched to a new branch 'sample-branch'
Технически, это создает новое имя ветки в вашем собственном хранилище Git с именем sample-branch
. Фиксация ha sh ID выбрана с помощью это новое имя ветви совпадает с фиксацией ha sh ID, выбранной с помощью существующего имени master
(также имя ветви).
Когда вы используете команду такого типа git checkout
, ваш Git установит в восходящем направлении новой ветви значение name другой ветви , если это, скажем, origin/sample-branch
. Но у вас, вероятно, нет и origin/sample-branch
. Это имя будет существовать только в том случае, если Git более чем на origin
- по URL-адресу, хранящемуся в remote с именем origin
, то есть - имеет ветку с именем sample-branch
и ваш Git видел это и скопировал это. Поскольку вы не использовали origin/sample-branch
здесь - и если бы вы его использовали, он все равно просто потерпел неудачу - ваш Git не не установил восходящий поток для новой ветви.
Вы нужно что-то делать в конце концов с этим. Там нет необходимости делать это прямо сейчас! Вы можете сделать это, когда захотите. Но в конце концов, вам нужно сделать это. Это включает два шага:
Вы должны получить другой Git, один над origin
, чтобы создать ветку с именем sample-branch
. Когда вы получите Git для создания , его sample-branch
, ваш Git теперь может скопировать его в ваш origin/sample-branch
, так что ваш origin/sample-branch
существует.
Как только ваш origin/sample-branch
существует, вам нужно получить ваш Git, чтобы установить origin/sample-branch
в качестве восходящего потока для sample-branch
.
Вы можете выполнить этот двухэтапный процесс с двумя отдельными командами Git, а в древнем прошлом у вас было , чтобы сделать это таким образом. Однако в современных Git версиях достаточно одной команды. Эта одна команда - git push -u origin sample-branch
.
Что это делает:
Пусть ваш Git вызовет свои Git (Git в origin
) используя URL-адрес, сохраненный в имени origin
.
Ваш Git предлагает своим Git любые новые коммиты и другие объекты, необходимые для выполнения общей задачи. Ваш Git будет отправлять коммиты и содержащиеся в них файлы, если это необходимо. Как только у них есть все необходимое, ваш Git затем отправляет им вежливый запрос: Пожалуйста, если все в порядке, создайте или обновите ваше имя sample-branch
, чтобы оно идентифицировало конкретный коммит. Конкретный коммит ваш Git рекомендует здесь тот же коммит, который идентифицирует ваше имя sample-branch
.
Если они примут этот запрос, это создаст их sample-branch
. Поскольку ваш Git теперь видит, что их Git имеет sample-branch
, ваш Git создает ваш origin/sample-branch
, чтобы запомнить это.
Теперь, когда ваш Git имеет origin/sample-branch
, ваш git push -u
автоматически вызывает git branch --set-upstream-to=origin/sample-branch sample-branch
.
Если вы по какой-то причине будете sh, чтобы сделать это старым двухшаговым способом, запустите:
git push origin sample-branch:sample-branch
(два имени, разделенные двоеточием, сообщают вашему Git, что им сказать Git). Затем, когда это удалось, выполните:
git branch --set-upstream-to=origin/sample-branch sample-branch
Очевидно, что одна команда git push -u
короче и проще.