Подтвердить что ты не робот

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
4b9b3361

Ответ 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, который устанавливает одно рабочее пространство. Он также преждевременно не нажимает ветвь на удаленное репо.