Для одной ветки см. Вопрос phd, связанный с , т.е. Сделать существующую ветку Git отслеживающей удаленную ветвь?
Чтобы сделать это для некоторыхмножество веток, используйте петлю.Чтобы сделать это для всех ветвей, используйте git for-each-ref
для циклического перебора всех ветвей, как в этой конструкции цикла sh / bash:
git for-each-ref --format='%(refname:short)' |
while read name; do
git branch --set-upstream-to=origin/$name $name
done
(которая в действительности является одной строкой, просто разбитой на более читаемые строкиздесь).
Предполагается, что для каждого name
имя восходящего потока должно быть origin/<em>name</em>
.Если нет, заменить соответствующим образом. Обратите внимание, что это переопределит любой существующий восходящий набор для каждого такого имени или завершится неудачей, если еще нет восходящего потока с этим именем.
Если origin/xyzzy
еще не существует, вы не можете установить ответвлениеxyzzy
иметь origin/xyzzy
в качестве восходящего потока.Это совершенно логично.Однако, это может быть не то, что вам нужно.
Вы можете переопределить интеллект Git по этому поводу, опустившись ниже уровня git branch
, заменив git branch --set-upstream-to
на необработанные git config
операции:
git for-each-ref --format='%(refname:short)' |
while read name; do
git config branch.$name.remote origin
git config branch.$name.merge refs/heads/$name
done
Предполагается, что ваш remote.origin.fetch
параметр +refs/heads/*:refs/remotes/origin/*
.Если это не так, вы уже должны знать, что вы делаете и как изменить вышеприведенный цикл.
Обратите внимание, что установка восходящего потока на несуществующее имя удаленного слежения заставит Git поверить, что имя использовалось и существовало, итеперь отсутствует: git branch -vv
сообщит об исходящем потоке как "ушел".Git не очень хорошо разбирается в причинности, поэтому считает, что если для восходящего потока задана несуществующая ветвь, то причинная последовательность должна была быть:
- существует восходящий поток
- установлен восходящий поток ветвик существующему восходящему потоку
- восходящий поток удаляется, в результате чего восходящий поток филиала был установлен ненадлежащим образом
, хотя на самом деле действительной причиной было неправильное установление восходящего потока с целью , в ожидании настройки , которая станет подходящей в будущем .Так что игнорируйте аннотацию «ушёл».