Git push: установить цель для ветки - PullRequest
28 голосов
/ 17 ноября 2011

Я бы хотел нажать мою текущую ветвь (hp1) с

git push

а не

git push origin hp1:team/hp1

Удаленная ветвь уже существует.

Мои местные филиалы:

develop
master
* hp1

git remote show origin сообщает мне:

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)

Так что, может быть, вы скажете мне, что не так и как это исправить.

EDIT мой конфиг:

[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

Ответы [ 4 ]

44 голосов
/ 17 ноября 2011

Прежде всего, при первом нажатии, выполните:

git push -u origin hp1:team/hp1

О опции -u:

-u
--set-upstream

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

Заметьте, что в руководстве это само по себе не определит, что произойдет, когда вы выполните git push в следующий раз.Когда вы делаете git pull, находясь в этой ветке, она будет извлекать его из установленного вами апстрима.Но когда вы нажимаете, он перемещается в соответствующую ветку (в данном случае hp1, а не team / hp1)

Чтобы это работало, вы должны установить push.default config значение равным upstream.Как только вы установите это, когда вы нажимаете на ветку (просто выполните git push), она будет толкать вверх по течению, как указано в branch.<name>.merge

Так же:

git config push.default upstream

Оpush.default:

push.default

Определяет действие, которое должен выполнить git push, если в командной строке не задан refspec, не задан refspec в удаленном и не refspecподразумевается любой из опций, указанных в командной строке.Возможные значения:

ничто - ничего не нажимать.

совпадение - нажать все соответствующие ветки.Все ветви, имеющие одинаковое имя на обоих концах, считаются совпадающими.Это по умолчанию.

upstream - выдвинуть текущую ветвь в ее восходящую ветвь.

tracking - устарел синоним вышестоящего.

current - передать текущую ветвь в одноименную ветвь.

3 голосов
/ 17 марта 2012

(март 2012): Остерегайтесь: эта политика "вверх по течению" может стать политикой по умолчанию
(через некоторое время после git1.7.10 +)
:

См. "Пожалуйста, обсудите: что должен делать git push, когда вы не говорите, что нажимать?"

В текущей настройке (т.е. push.default=matching), git push без аргумента вытолкнет все ветви, которые существуют локально и удаленно, с одним и тем же именем .
Это обычно подходит, когда разработчик проталкивает свой собственный общедоступный репозиторий, но можетсбивает с толку, если не опасно при использовании общего хранилища.

Предложение состоит в том, чтобы изменить значение по умолчанию на 'upstream' , то есть подтолкнуть только текущую ветвь, и передать ее в ветвь, с которой git pull вытянет.
Другой кандидатis 'current';при этом только текущая ветвь перемещается в удаленную ветвь с тем же именем.

То, что обсуждалось до сих пор, можно увидеть в этой теме:

http://thread.gmane.org/gmane.comp.version-control.git/192547/focus=192694

Предыдущие соответствующие обсуждения включают в себя:

Присоединиться к обсуждениюотправьте свои сообщения по адресу: git@vger.kernel.org

2 голосов
/ 17 ноября 2011

Используйте параметр -u для git push:

$ git push -u origin hp1:team/hp1

Затем, после этого, вы можете сделать:

$ git push
0 голосов
/ 10 сентября 2015

Следующее позволит не указывать -u ${branch_name} для первого git push.

git config "branch.${branch_name}.remote" origin
git config "branch.${branch_name}.merge" "refs/heads/${branch_name}"

Конечно, это гораздо больше печатает, но не в сценарии, который устанавливает рабочее пространство,Это также не приводит к преждевременной передаче ветки в удаленное хранилище.

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