Нет, это невозможно в Git. Но это также не так важно (на самом деле!), Потому что отслеживание ветви в Git просто означает, что одна ветвь имеет другую установку в качестве в восходящем направлении:
git branch --set-upstream-to=desired-upstream my-branch
Каждая из ваших веток может иметь не более одного восходящего потока в любое время Когда ваша ветвь имеет восходящий поток, происходит следующее:
git fetch
без аргументов знает, какой другой репозиторий Git может содержать коммиты для извлечения. Следовательно, вы можете запустить git fetch
вместо git fetch <em>remote</em>
.
Но если у вас есть только один пульт с именем origin
, что довольно часто, это ничего не даст, так как git fetch
без аргументов будет извлекаться из origin
, если у него нет ничего лучше от восходящего потока. Другими словами, git fetch
уже выбирает с (одного) правильного пульта в любом случае. Таким образом, наличие здесь выше по течению ничего вам не купит.
git merge
и git rebase
, запускаемые без дополнительных аргументов, автоматически узнают, какое имя для удаленного отслеживания использовать. Это действительно покупает вам что-то, но если вы хотите иметь два восходящих потока, вам все равно придется указать git merge
или git rebase
, какой восходящий поток использовать, поэтому набрать git merge fred/xyzzy
и git merge giselle/xyzzy
не намного хуже. На самом деле это, вероятно, лучше: git merge upstream1
и git merge upstream2
короче типа, но fred/xyzzy
upstream # 1, или это upstream # 2? Почему бы не использовать более запоминающееся имя?
Как и другие две выше, git pull
- который просто запускает две другие, сначала получить, а затем одну из двух других команд - также знает, что использовать по умолчанию. Я рекомендую большинству пользователей Git избегать git pull
, поскольку это удобная команда, но в худшие времена она неудобна. Если вы избегаете git pull
, то, зная об этом, вы ничего не покупаете вообще.
Стандартное поведение git push
с использованием стандартной настройки push.default
simple
лучше. Это действительно что-то вам покупает, но вам, вероятно, все равно нужно только пихать в один другой Git-репозиторий, так что вы можете выбрать этот конкретный другой Git-репозиторий как (единственный) восходящий поток для ветви.
Наконец, команда git status
(которую запускают или выполняют некоторые другие команды Git) становится более информативной, сообщая вам, сколько коммитов вы опережаете и отстаете от выбранного восходящего потока. Это включает в себя git branch -v
, а также. Я считаю, что это имеет большое значение.
К счастью, есть простой способ получить ту же информацию из командной строки, и вы можете создать псевдоним или скрипт, чтобы сделать это для вас. Когда git status
говорит, что вы «впереди 1» и / или «отстаете от 3», он запускает эквивалент:
git rev-list --count --left-right <local-name>...<upstream-name>
Например, с веткой stash-exp
, имеющей origin/master
в качестве восходящего потока, я могу запустить:
git rev-list --count --left-right stash-exp...origin/master
и получите те же два числа (как необработанные числа): первое - это счет «впереди», а второе - «позади». Обратите внимание на три периода .
здесь; для этой формы этой команды и параметров требуются все три, в то время как в большинстве команд вместо этого используется синтаксис из двух точек.
Таким образом, в итоге, установка восходящего потока так, чтобы какое-либо имя локальной ветви отслеживало либо какое-либо имя удаленного отслеживания, либо какое-либо другое имя локальной ветви, имело очень низкую стоимость (одна команда) и некоторые заметные преимущества, поэтому вам следует делай это, когда это имеет смысл. Но преимущества не столь велики, так как необходимо , чтобы иметь более одного восходящего потока.