Git: Отслеживать ветку без проверки? - PullRequest
0 голосов
/ 03 июля 2018

Итак, я знаю, что вы можете вытянуть ветку, не проверив ее:

git fetch origin branchname:branchname

Есть ли способ также отслеживать эту ветку, не проверяя ее? (Обычно это достигается с помощью: git checkout --track origin/branchname или git branch -u origin branchname). Ответ может быть либо отдельной командой, либо частью выборки, упомянутой выше.

1 Ответ

0 голосов
/ 03 июля 2018

Ответ уже встроен в ваш вопрос, как отмечают несколько комментаторов: используйте git branch --set-upstream-to=origin/<em>branchname branchname</em> (или более короткую версию с -u). Здесь может быть важно добавить несколько заметок.

Это не ветвление (или, ну, может быть, это так, поскольку эта фраза не очень хорошо определена :-)). Что это делает:

  • получить все необходимые коммиты из источника, а затем
  • создать или обновить локальную ветвь с именем branchname в зависимости от того, что выборка увидела в ветке origin branchname.

Обновление, если оно является обновлением, завершается ошибкой, если изменение на branchname не является операцией ускоренной перемотки вперед. Чтобы заставить его добиться успеха в этом случае, добавьте флаг форсировки: либо --force, либо начальный знак плюс +.

Обновление также завершается ошибкой, если branchname является проверенной веткой, то есть, если HEAD является символической ссылкой на эту ветку.

Если локальная ветвь уже существует и уже имеет вышестоящий набор, вы можете не захотеть перезаписывать текущий вышестоящий параметр. Вы можете проверить с помощью git rev-parse: <em>branchname</em>@{upstream} имена текущих настроек восходящего потока branchname, или произойдет сбой, если его нет, поэтому:

if ! git rev-parse $branchname@{upstream} >/dev/null 2>&1; then
    git branch --set-upstream-to=origin/$branchname $branchname
fi

установит восходящий поток, если он не был установлен, но ничего не сделает, если он уже был установлен.

...