Git push: установить цель для ветки
Я хотел бы нажать мою текущую ветку (hp1) с помощью
git push
а не
git push origin hp1:team/hp1
Удаленная ветвь уже существует.
Мои локальные ветки:
develop
master
* hp1
git начало удаленного шоу говорит мне:
Remote branches:
develop tracked
master tracked
team/h2 tracked
team/hp1 tracked
team/n1 tracked
Local branches configured for 'git pull':
develop merges with remote develop
master merges with remote master
hp1 merges with remote team/hp1
Local refs configured for 'git push':
master pushes to master (up to date)
Я уже пробовал
git branch --set-upstream hp1 origin/team/hp1
и
git branch --set-upstream hp1 refs/remotes/origin/team/hp1
но оба они не работают.
У моего коллеги есть локальный филиал, называемый удаленной ветвью (team/hp1), и вышеописанный код работает для него. Он получает в конце дополнительный
Local refs configured for 'git push':
develop pushes to develop (up to date)
master pushes to master (up to date)
team/hp1 pushes to team/hp1 (up to date)
Так что, возможно, вы можете сказать мне, что не так, и как исправить это.
ИЗМЕНИТЬ
my config:
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = ***@***:***.git
[branch "master"]
remote = origin
merge = refs/heads/master
[branch "hp1"]
remote = origin
merge = refs/heads/team/hp1
Ответы
Ответ 1
Прежде всего, при первом нажатии, выполните:
git push -u origin hp1:team/hp1
О опции -u:
-u
--set-upstream
Для каждой ветки, которая обновлена или успешно нажата, добавьте (отслеживание), используемое без аргументов git -pull (1) и другие команды. Дополнительные сведения см. В разделе branch..merge in git -config (1).
Примечание из руководства, которое само по себе не будет определять, что происходит, когда вы делаете git push
в следующий раз. Когда вы выполняете git pull
, находясь в этой ветке, он будет извлекать его из восходящего потока, который вы установили. Но когда вы нажимаете, он будет подталкивать к соответствующей ветке (в данном случае hp1, а не команде /hp 1)
Для этого вам нужно установить push.default
значение конфигурации upstream
. После того, как вы установили это, когда вы нажмете из ветки (просто сделайте git push
), она будет двигаться к восходящему потоку, как указано branch.<name>.merge
Итак:
git config push.default upstream
О push.default:
push.default
Определяет действие git push должно принимать, если refcpec не указывается на командной строки, no refspec не настроен на пульте дистанционного управления, и нет refspec подразумевается любым из параметров, заданных в командной строке. Возможное значения:
ничего - ничего не нажимайте.
matching - нажмите все соответствующие ветки. Все ветки, имеющие одинаковые имя на обоих концах считается совпадающим. Это значение по умолчанию.
вверх по течению - нажмите текущую ветвь в свою ветку вверх по течению.
отслеживание - устаревший синоним восходящего потока.
current - нажмите текущую ветвь на ветвь с тем же именем.
Ответ 2
(март 2012 г.): Остерегайтесь: политика "вверх по течению" может скоро стать дефолтом
(через некоторое время после git1.7.10 +):
См. " Пожалуйста, обсудите: что" git push "должен делать, когда вы не говорите, что нажать?"
В текущей настройке (т.е. push.default=matching
) git push
без аргумента будет удалять все ветки, которые существуют локально и удаленно с тем же именем.
Обычно это подходит, когда разработчик подталкивает свой собственный публичный репозиторий, но может быть запутан, если не опасен при использовании общего хранилища.
Предложение изменить значение по умолчанию на "upstream
" , т.е. нажать только текущую ветку и нажать ее на ветвь git pull pull from.
Другой кандидат: "current
"; это подталкивает только текущую ветку к удаленной ветки с тем же именем.
То, что обсуждалось до сих пор, можно увидеть в этом потоке:
http://thread.gmane.org/gmane.comp.version-control.git/192547/focus=192694
Предыдущие соответствующие обсуждения включают:
Чтобы присоединиться к обсуждению, отправьте свои сообщения на адрес: git @vger.kernel.org
Ответ 3
Используйте параметр -u
для git push
:
$ git push -u origin hp1:team/hp1
Затем после этого вы можете сделать:
$ git push
Ответ 4
Следующее позволит не указывать -u ${branch_name}
для первого git push
.
git config "branch.${branch_name}.remote" origin
git config "branch.${branch_name}.merge" "refs/heads/${branch_name}"
Конечно, это гораздо более типизируется, но не тогда, когда оно находится в script, который устанавливает одно рабочее пространство. Он также преждевременно не нажимает ветвь на удаленное репо.