5

Когда я вытягиваю из новых добавленных пультов, я должен явно указать название ветви:

$ git pull remote1
... 
Error: you didn't specify a branch name.

$ git pull remote1 master

Хотя я работаю над master веткой.

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

Итак, я могу настроить git, чтобы он всегда вытащил из ветки с тем же именем?

1 ответ1

7

Если вы не хотите сбрасывать «восходящую конфигурацию» вашей локальной ветки, вы можете использовать это:

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 --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 и более поздних версиях).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .