Во-первых, отметим, что git push
«хочет» еще два аргумента и будет автоматически создавать их, если вы их не предоставите. Поэтому основная команда git push remoterefspec
.
remote
часть обычно тривиальная, так как это почти всегда просто слово origin
. Более сложная часть - refspec
. Чаще всего люди пишут название ветки здесь: git push origin master
, например. Это использует вашу локальную ветвь, чтобы нажать на ветку с таким же именем на пульте дистанционного управления, создав при необходимости. Но это не должно быть только название ветки.
В частности, a refspec
имеет две части, разделенные двоеточием. Для git push
часть слева идентифицирует то, что нужно нажать, , а часть справа идентифицирует имя, которое следует дать удаленному. Часть слева в этом случае будет branch_name
, а часть справа будет branch_name_test
. Например:
git push origin foo:foo_test
Как вы делаете нажим, вы можете сообщить git push
установить вверх по течению название вашего филиала по в то же время, добавляя -u
к git push
опций. Настройка имени восходящего потока делает ваш git сохранять имя foo_test
(или что-то еще), так что будущее git push
без аргументов, пока вы находитесь на ветке foo
, может попытаться нажать на foo_test
на пульте дистанционного управления (git также сохраняет удаленный, origin
в этом случае, так что вам также не нужно вводить это).
Вам необходимо пройти только -u
: он в основном просто запускает git branch --set-upstream-to
для вас. (Если вы снова перейдете -u
, он снова запустит настройку восходящего потока, изменив ее по указанию, или вы сами можете запустить git branch --set-upstream-to
.)
Однако, если ваш git 2.0 или новее, и вы не установили никаких специальная конфигурация, вы столкнетесь с тем же типом вещей, который заставил бы меня ввести сноску 1 выше: push.default
будет установлен в simple
, который откажется от нажатия, потому что имя восходящего потока отличается от вашего собственного локального имени. Если вы установили push.default
в upstream
, git перестанет жаловаться, но самое простое решение - сначала переименовать локальную ветвь, чтобы совпадали локальные и удаленные имена. (Какие параметры для установки и/или следует ли переименовать ветку, до вас.)
Точнее, мерзавец консультируется ваши настройки remote.remote.push
вывести вверх по течению половины refspec. Если вы ничего здесь не задали, то по умолчанию должен использовать одно и то же имя.
Это не должно быть название филиала. Например, вы можете указать HEAD
или хеш-код фиксации.Если вы используете что-то другое, кроме имени филиала, то вы можете указать refs/heads/branch
справа (это зависит от того, какие имена уже находятся на пульте дистанционного управления).
Просто обратите внимание на это, если вы не включаете флаг '-u' или' --set-upstream', вам придется набирать всю эту команду каждый раз, когда вы нажимаете. 'git push' не будет работать на нем до тех пор, пока не будет установлен восходящий поток. – Scott
хорошая точка, отредактировал мой ответ –