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

Я хотел бы знать, есть ли способ узнать, какая локальная ветка отслеживает, какая удаленная ветвь в Git.

Я использую один удаленный сервер, который называется «origin».

git
230 голосов | спросил PJ. 27 AM00000050000005631 2010, 05:04:56

10 ответов


197

Используя пример моей копии Puppet, выписанный из репозитория Git вверх по Github.com ...

$ git remote show origin
* remote origin
  Fetch URL: git://github.com/reductivelabs/puppet.git
  Push  URL: git://github.com/reductivelabs/puppet.git
  HEAD branch: master
  Remote branches:
    0.24.x                 tracked
    0.25.x                 tracked
    2.6.x                  tracked
    master                 tracked
    next                   tracked
    primordial-ooze        tracked
    reins-on-a-horse       tracked
    testing                tracked
    testing-17-march       tracked
    testing-18-march       tracked
    testing-2-april        tracked
    testing-2-april-midday tracked
    testing-20-march       tracked
    testing-21-march       tracked
    testing-24-march       tracked
    testing-26-march       tracked
    testing-29-march       tracked
    testing-31-march       tracked
    testing-5-april        tracked
    testing-9-april        tracked
    testing4268            tracked
  Local branch configured for 'git pull':
    master merges with remote master
  Local ref configured for 'git push':
    master pushes to master (up to date)

Тогда, если я должен был выполнить следующее:

$ git checkout -b local_2.6 -t origin/2.6.x 
Branch local_2.6 set up to track remote branch 2.6.x from origin.
Switched to a new branch 'local_2.6'

И, наконец, снова запустите команду git remote show origin. Затем я увижу следующее внизу:

git remote show origin
ответил Jeremy Bouse 27 AM00000070000003231 2010, 07:03:32
122

Для всех ветвей:

git branch -avv

Только для локальных ветвей:

git branch -lvv

Только для удаленных филиалов:

git branch -rvv

показывает все ветви, а также имя ветви вверх по течению.

ответил sunew 14 FebruaryEurope/MoscowbTue, 14 Feb 2012 20:02:04 +0400000000pmTue, 14 Feb 2012 20:02:04 +040012 2012, 20:02:04
52

Джереми Боуз иллюстрирует как git remote show отображает информацию о отслеживании . Этого должно быть достаточно, если вам нужна только информация для потребления человеком.

Если вы планируете использовать информацию в автоматическом контексте (например, сценарий), вы должны использовать нижний уровень («плавающий») git for-each-ref .

% git remote show origin
* remote origin
⋮
  Local branches configured for 'git pull':
    master merges with remote master
    pu     merges with remote pu
⋮
% git for-each-ref --format='%(refname:short) <- %(upstream:short)' refs/heads
master <- origin/master
pu <- origin/pu

git for-each-ref узнал токен %(upstream) в Git 1.6.3 . С более ранними версиями Git вам нужно будет извлечь информацию отслеживания с помощью git config branch.<name>.remote и git config branch.<name>.merge ( вероятно, используя git for-each-ref для сборки команд для каждого имени локальной ветви).

ответил Chris Johnsen 27 AM00000070000000531 2010, 07:18:05
18

Для конкретной ветви вы можете использовать git rev-parse с суффиксом @{u} или @{upstream} на название ветки, например:

$  git rev-parse --symbolic-full-name [email protected]{u}
refs/remotes/github-mhl/master

... или для сокращенной формы, добавьте --abbrev-ref

$ git rev-parse --symbolic-full-name --abbrev-ref [email protected]{u}
github-mhl/master

Обычно вы можете использовать синтаксис [email protected]{upstream}, где ожидается коммит.

ответил Mark Longair 1 Maypm12 2012, 13:18:01
10

Я использую следующий сценарий оболочки (называемый git-tracks), чтобы показать удаленную ветку, отслеживаемую текущей ветвью:

#!/bin/sh -e
branch=$(git symbolic-ref HEAD)
branch=${branch##refs/heads/}
remote=$(git config "branch.${branch}.remote")
remoteBranch=$(git config "branch.${branch}.merge")
remoteBranch=${remoteBranch##refs/heads/}

echo "${remote:?}/${remoteBranch:?}"

Это также можно использовать упомянутый git for-each-ref, но я нашел, что прямой доступ несколько проще, чем фильтрация вывода для текущей ветви.

ответил Ingo Karkat 21 Jpm1000000pmSat, 21 Jan 2012 18:26:28 +040012 2012, 18:26:28
8
Файл

.git/config также предоставит информацию о филиале отслеживания как

[remote "Hub"]
    url = ssh://xxxx/tmp/Hub
    fetch = +refs/heads/*:refs/remotes/Hub/*
[branch "develop"]
    remote = Hub
    merge = refs/heads/develop
[branch "Dev1"]
    remote = Test
    merge = refs/heads/Dev1
[remote "Test"]
    url = ssh://xxxx/tmp/gittesting/Dev1GIT
    fetch = +refs/heads/*:refs/remotes/Test/*
ответил Karthik 11 +04002012-10-11T16:59:39+04:00312012bEurope/MoscowThu, 11 Oct 2012 16:59:39 +0400 2012, 16:59:39
5
git branch -vv

показывает, что именно вы просите. Он показывает локальные ветви вместе с соответствующей удаленной ветвью, которую они отслеживают.

ответил Jarl 7 Mayam13 2013, 11:50:23
2

Добавьте эти руны в раздел [alias] файла .gitconfig:

show-tracking = !sh -c 'git ls-remote . |grep `git log -1 --grep="git-svn-id" --format=%H`|perl -pe "s/[[:alnum:]]+[[:space:]]//"'
ответил DaveR 7 MarpmWed, 07 Mar 2012 20:48:56 +04002012-03-07T20:48:56+04:0008 2012, 20:48:56
0

Мне нужно было найти соответствующую удаленную ветвь (если она есть) для каждой локальной ветви в цикле, которая действовала в списке локальных ветвей. Я закончил использовать следующее:

git for-each-ref --format='%(refname:short):%(upstream:short)' refs/heads | grep "^LocalBranchName:.*/" | sed "s/^LocalBranchName://"

Это не выведет ничего (пустую строку) для локальных ветвей, у которых нет соответствующей удаленной ветви («someremote /somebranch»).

ответил Ville 23 62013vEurope/Moscow11bEurope/MoscowSat, 23 Nov 2013 04:08:22 +0400 2013, 04:08:22
-1

Попробуйте git branch с параметрами :

 -r
List or delete (if used with -d) the remote-tracking branches. 

-a
List both remote-tracking branches and local branches. 

В противном случае проверьте .git/config.

ответил Andrew 27 AM00000050000004131 2010, 05:12:41

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132