Как настроить тянуть ту же ветку по умолчанию?

4827
Xiè Jìléi

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

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

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

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

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

5

1 ответ на вопрос

7
Chris Johnsen

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

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@ 

Вы можете обновить исходную конфигурацию в 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 и более поздних версиях).

+1 за `git config -e`, так как я этого не знал ... Надеюсь, у меня будет время проверить остальную часть ответа;) Dan Rosenstark 13 лет назад 0

Похожие вопросы