Там нет такого понятия, встроенного, и отслеживание хранится только в другом направлении: «X отслеживает Y», а не «Y отслеживается ... ", что является более сложным, так как часть" ... "может расширяться до более чем одного элемента. (Кроме того, я считаю, что более типичным для Y является ветка удаленного отслеживания в первую очередь, и в этом случае вы никогда не сможете быть на Y, хотя команда, которая пытается найти «какие треки Y», безусловно, может принять аргументы, так что вы могли бы сказать: «расскажи мне о какой-либо из моих ветвей, которые отслеживают origin/master
).
Тем не менее, это, конечно, можно строить такая вещь. алгоритм выглядит следующим образом, в Python-эск псевдо-кода :
table = {}
for branch in local_branches:
try:
remote, tracked = get_what_branch_tracks(branch)
except ValueError:
continue # local branch "branch" not tracking anything
try:
br2 = analyze(branch, remote, tracked)
except ValueError:
warn('upstream for %s is gone' % branch)
continue
# at this point br2 is, e.g., origin/master or a local branch that "branch" tracks
table.setdefault(br2, []).append(branch)
# now table[] is a table of branches that are tracked, with
# each table[key] being the branches that track branch "key"
Так что теперь для любого интересного филиала (ов), которые находятся в table
, вы просто подсчитывают изменения найти, в состоянии в различных парах ветви, точно так же, git status
делает, что в оболочке просто:
# to compute "git status" for branch X that tracks Y:
nahead=$(git rev-list --count Y..X) # we're ahead $nahead commits
nbehind=$(git rev-list --count X..Y) # and behind $nbehind
Если вы позади, но не вперед, вы можете быстро вперед.
Детали для get_what_branch_tracks
просто сделать некоторые git config --get
s, из branch.branch.remote
и branch.branch.merge
, в то время как данные analyze
сложнее: если remote
является .
то, что находится в tracked
просто, но если это настоящий удаленный, все, что находится в tracked
, должно проходить через соответствующие строки fetch
, чтобы найти соответствующую ветвь удаленного слежения.