Как я могу увидеть, какие ветви Git отслеживают, какая ветка удаленной / восходящей? - PullRequest
717 голосов
/ 10 февраля 2011

Я знаю, что могу сделать git branch --all, и это показывает мне как локальные, так и удаленные ветви, но не очень полезно показывать мне отношения между ними.

Как вывести список ветвей таким образом, чтобы показать, какая локальная ветвь отслеживает, какой удаленный?

Ответы [ 11 ]

986 голосов
/ 10 февраля 2011

Очень фарфоровая команда, не очень хорошо, если вы хотите это для сценариев:

git branch -vv   # doubly verbose!

Обратите внимание, что в git 1.8.3 эта ветка вверх по течению отображается в синий (см." Что это за отслеживание веток (если вообще что-то) в git? ")


Если вы хотите получить чистый вывод, см. ответ arcresu - он использует фарфоркоманда, которая, как я полагаю, не существовала в то время, когда я изначально писал этот ответ, является более краткой и работает с ветвями, настроенными для rebase, а не просто для слияния.

221 голосов
/ 10 февраля 2011

git remote show origin

Замените «origin» на имя вашего пульта.

90 голосов
/ 02 июня 2013

Если вы посмотрите на справочную страницу для git-rev-parse, вы увидите следующий синтаксис:

<branchname>@{upstream}, например master@{upstream}, @{u}

Суффикс @{upstream} к ответвлению (сокращенная форма <branchname>@{u}) относится к ветви, над которой устанавливается ветвь, указанная в Branchname.Пропущенное имя-ответвление по умолчанию соответствует текущему.

Следовательно, чтобы найти восходящий поток ветви master, вы должны сделать:ветку, вы можете сделать что-то вроде:

while read branch; do
  upstream=$(git rev-parse --abbrev-ref $branch@{upstream} 2>/dev/null)
  if [[ $? == 0 ]]; then
    echo $branch tracks $upstream
  else
    echo $branch has no upstream configured
  fi
done < <(git for-each-ref --format='%(refname:short)' refs/heads/*)

# Output:
# master tracks origin/master
# ...

Это чище, чем парсинг ссылок и настроек вручную.

77 голосов
/ 10 февраля 2011

Альтернатива ответу Куби - взглянуть на файл .git/config, в котором показана конфигурация локального репозитория:

cat .git/config

37 голосов
/ 11 октября 2013

Для текущей ветви есть два хороших варианта:

% git rev-parse --abbrev-ref --symbolic-full-name @{u}
origin/mainline

или

% git for-each-ref --format='%(upstream:short)' $(git symbolic-ref -q HEAD)
origin/mainline

Этот ответ также здесь на немного другой вопрос, который был (ошибочно) помечен как дубликат.

34 голосов
/ 20 июня 2015
git for-each-ref --format='%(refname:short) <- %(upstream:short)' refs/heads

покажет строку для каждой локальной ветви.Отслеживающая ветвь будет выглядеть так:

master <- origin/master

Не отслеживающая ветвь будет выглядеть так:

test <- 
14 голосов
/ 23 октября 2014

Для текущей ветви вы также можете сказать git checkout (без любой ветви). Это неоперация с побочными эффектами для отображения информации об отслеживании, если она существует, для текущей ветви.

$ git checkout 
Your branch is up-to-date with 'origin/master'.
6 голосов
/ 06 апреля 2012

Я использую этот псевдоним

git config --global alias.track '!f() { ([ $# -eq 2 ] && ( echo "Setting tracking for branch " $1 " -> " $2;git branch --set-upstream $1 $2; ) || ( git for-each-ref --format="local: %(refname:short) <--sync--> remote: %(upstream:short)" refs/heads && echo --Remotes && git remote -v)); }; f'

, затем

git track
3 голосов
/ 12 ноября 2012

Основано на Ответе Оливье Рефало

if [ $# -eq 2 ] 
then
    echo "Setting tracking for branch " $1 " -> " $2
    git branch --set-upstream $1 $2
else
    echo "-- Local --" 
    git for-each-ref --shell --format="[ %(upstream:short) != '' ] && echo -e '\t%(refname:short) <--> %(upstream:short)'" refs/heads | sh
    echo "-- Remote --" 
    REMOTES=$(git remote -v) 
    if [ "$REMOTES" != '' ]
    then
        echo $REMOTES
    fi  
fi

Показывает только локальный с настроенной дорожкой.

Напишите его в сценарии git-track на вашем пути и вы получите git track команда

Более детальная версия на https://github.com/albfan/git-showupstream

1 голос
/ 23 января 2019

Вот аккуратный и простой.Можно проверить git remote -v, который показывает вам все источники и восходящие потоки текущей ветви.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...