Как настроить тянуть ту же ветку по умолчанию?
Когда я вытаскиваю из новых добавленных пультов, я должен явно указать название ветви:
$ git pull remote1
...
Error: you didn't specify a branch name.
$ git pull remote1 master
Хотя я работаю над master
ветка.
Может быть полезно извлечь из другой ветки с разных пультов, но со мной такого никогда не было. В нашей команде мы никогда не вытягиваем ветку с другим именем к текущей проверенной ветке.
Итак, можно ли настроить git так, чтобы он всегда вынимал из ветки с одинаковым именем?
1 ответ
Если вы не хотите сбрасывать "исходную конфигурацию" вашей локальной ветки, вы можете использовать это:
git pull remote1 "$(git rev-parse --symbolic-full-name HEAD)"
Вероятно, он будет делать неожиданные вещи, если ваш локальный заголовок отсоединен.
Вы можете упаковать его в псевдоним Git, чтобы его было проще набирать (хотя вам все равно нужно будет распространять псевдоним среди всех пользователей):
git config --global alias.pullcb \
'!sh -c '\''git pull "$1" "$(git rev-parse --symbolic-full-name HEAD)"'\'' -'
Используйте псевдоним как это:
git pullcb remote1
Я предполагаю, что этот тип отношений ветвления (нужно легко извлечь из одной и той же именованной ветви на любом из нескольких пультов) не легко настраивается, потому что он редко полезен, когда большая часть работы выполняется в тематических ветвях.
С другой стороны, если "новый удаленный" будет новым первичным исходным источником для вашей локальной ветки, то вам следует рассмотреть возможность обновления "восходящей конфигурации" вашей локальной ветки, чтобы вы могли просто использовать git pull
(без указания удаленного имени).
Вы можете проверить исходную конфигурацию для ветки в Git 1.7.0 и позже 1 с помощью
git rev-parse --symbolic-full-name my-branch@{upstream}
Вы можете обновить исходную конфигурацию в Git 1.7.0 и позже 2 с помощью
git branch --set-upstream my-branch some-remote/their-branch
Как только ваша ветвь имеет соответствующую исходную конфигурацию, вы можете просто использовать git pull
вытащить из текущей ветви "восходящей ветви".
В конечном итоге исходная конфигурация ветки контролируется branch.<name>.remote
а также branch.<name>.merge
переменные конфигурации (см. git-config(1)). --track
а также --no-track
варианты git branch
а также git checkout
может использоваться для контроля того, установлены ли эти переменные при создании ветви. branch.autoSetupMerge
Переменная конфигурации управляет поведением по умолчанию (когда ни --track
ни --no-track
дано); по умолчанию создается восходящая конфигурация для веток, созданных из веток удаленного отслеживания. Таким образом, следующие команды создают новую локальную ветку "my-branch" и настраивают ее для отслеживания ветви "them-branch" с удаленного "some-remote":
git branch my-branch some-remote/their-branch
git checkout -b my-branch some-remote/their-branch
1 Для версий Git до 1.7.0 вы можете проверить исходную конфигурацию "my-branch" следующим образом:
git config branch.my-branch remote && git config branch.my-branch.merge
Смотрите git-config(1) для описания значений.
Вы также можете вручную проверить .git/config
файл.
2 Для версий Git до 1.7.0 вы можете изменить исходную конфигурацию для "my-branch" следующим образом:
git config branch.my-branch.remote some-remote &&
git config branch.my-branch.merge refs/heads/their-branch
Смотрите git-config(1) для описания значений.
Вы также можете вручную редактировать .git/config
файл (git config -e
в Git 1.6.3 и позже).