Узнайте, какую удаленную ветку отслеживает локальная ветка - PullRequest
705 голосов
/ 05 октября 2008

Смотри также:
Как узнать, какие ветви Git отслеживают, какая ветка удаленного / восходящего потока?

Как узнать, какую удаленную ветку отслеживает локальная ветвь?

Нужно ли анализировать вывод git config, или есть команда, которая сделает это для меня?

Ответы [ 20 ]

856 голосов
/ 22 сентября 2012

Здесь - это команда, которая дает вам все ветви отслеживания (сконфигурированные для 'pull'), см .:

$ git branch -vv
  main   aaf02f0 [main/master: ahead 25] Some other commit
* master add0a03 [jdsumsion/master] Some commit

Вам нужно пройтись по SHA и любым сообщениям коммита с длинным переносом, но это быстро набрать, и я получаю, что ветви отслеживания выровнены вертикально в 3-м столбце.

Если вам нужна информация о конфигурации «pull» и «push» для каждой ветви, см. Другой ответ на git remote show origin.


Обновление

Начиная с git версии 1.8.5, вы можете показать ветку upstream с git status и git status -sb

330 голосов
/ 18 марта 2012

Два варианта:

% 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
202 голосов
/ 12 октября 2011

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

git remote show origin явно говорит вам, какие ветви отслеживают, какие удаленные ветви. Вот пример выходных данных из репозитория с одним коммитом и удаленной веткой с именем abranch:

$ git branch -av
* abranch                d875bf4 initial commit
  master                 d875bf4 initial commit
  remotes/origin/HEAD    -> origin/master
  remotes/origin/abranch d875bf4 initial commit
  remotes/origin/master  d875bf4 initial commit

против

$ git remote show origin
* remote origin
  Fetch URL: /home/ageorge/tmp/d/../exrepo/
  Push  URL: /home/ageorge/tmp/d/../exrepo/
  HEAD branch (remote HEAD is ambiguous, may be one of the following):
    abranch
    master
  Remote branches:
    abranch tracked
    master  tracked
  Local branches configured for 'git pull':
    abranch merges with remote abranch
    master  merges with remote master
  Local refs configured for 'git push':
    abranch pushes to abranch (up to date)
    master  pushes to master  (up to date)
62 голосов
/ 31 августа 2011

Обновление: Что ж, прошло уже несколько лет, как я это опубликовал! Для моей конкретной цели сравнения HEAD с восходящим потоком я теперь использую @{u}, что является сокращением, которое ссылается на HEAD восходящей ветви отслеживания. (См. https://git -scm.com / docs / gitrevisions # gitrevisions-emltbranchnamegtupstreamemegemmasterupstreamememuem ).

Оригинальный ответ: Я тоже сталкивался с этой проблемой. Я часто использую несколько пультов в одном репозитории, и легко забыть, какой из них отслеживает ваша текущая ветка. И иногда это полезно знать, например, когда вы хотите посмотреть свои локальные коммиты через git log remotename/branchname..HEAD.

Все это хранится в переменных git config, но вам не нужно анализировать выходные данные git config. Если вы вызываете git config, за которым следует имя переменной, она просто напечатает значение этой переменной, анализ не требуется. Имея это в виду, вот несколько команд для получения информации о настройке отслеживания вашей текущей ветки:

LOCAL_BRANCH=`git name-rev --name-only HEAD`
TRACKING_BRANCH=`git config branch.$LOCAL_BRANCH.merge`
TRACKING_REMOTE=`git config branch.$LOCAL_BRANCH.remote`
REMOTE_URL=`git config remote.$TRACKING_REMOTE.url`

В моем случае, поскольку меня интересует только имя моего текущего пульта, я делаю это:

git config branch.`git name-rev --name-only HEAD`.remote
40 голосов
/ 16 июля 2016

Местные филиалы и их пульты.

git branch -vv 

Все филиалы и трекинг пультов.

git branch -a -vv

Посмотрите, где локальные ветви явно настроены для push и pull.

git remote show {remote_name}
19 голосов
/ 16 ноября 2016

Это покажет вам ветку, на которой вы находитесь:

$ git branch -vv

Это покажет только текущую ветку, в которой вы находитесь:

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

например:

myremote/mybranch

Вы можете узнать URL удаленного , который используется текущей веткой , с которой вы:

$ git remote get-url $(git for-each-ref --format='%(upstream:short)' $(git symbolic-ref -q HEAD)|cut -d/ -f1)

например:

https://github.com/someone/somerepo.git
15 голосов
/ 21 июня 2011

Я не знаю, считается ли это разбором выходных данных git config, но это определит URL-адрес пульта, который отслеживает мастер:

$ git config remote.$(git config branch.master.remote).url
13 голосов
/ 23 октября 2014

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

$ git checkout 
Your branch is up-to-date with 'origin/master'.
11 голосов
/ 16 сентября 2015

Еще один способ

git status -b --porcelain

Это даст вам

## BRANCH(...REMOTE)
modified and untracked files
9 голосов
/ 10 декабря 2014

Другой простой способ - использовать

cat .git/config в git-репо

Это будет список деталей для местных филиалов

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