web-dev-qa-db-ja.com

どのローカルブランチがGitのどのリモートブランチを追跡しているかを確認する方法は?

Gitでどのローカルブランチがどのリモートブランチを追跡しているかを確認する方法があるかどうか知りたいのですが。

「Origin」という名前の1つのリモートサーバーを使用しています。

237
PJ.

Github.comのアップストリームGitリポジトリからチェックアウトした私のPuppetのコピーの例を使用しています...

$ 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コマンドをもう一度実行すると、下の方に以下が表示されます。

  Local branches configured for 'git pull':
    local_2.6 merges with remote 2.6.x
    master    merges with remote master
197
Jeremy Bouse

すべてのブランチ:

git branch -avv

ローカルブランチのみ:

git branch -lvv

リモートブランチのみ:

git branch -rvv

すべてのブランチと上流のブランチの名前を表示します。

125
sunew

Jeremy Bouseが _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_は Git 1.6.%(upstream)トークンを学習しました。以前のバージョンのGitでは、_git config branch.<name>.remote_および_git config branch.<name>.merge_を使用して追跡情報を抽出する必要があります(おそらく_git for-each-ref_を使用して、各ローカルブランチ名のコマンドを作成します)。

52
Chris Johnsen

特定のブランチでは、ブランチ名にgit rev-parseまたは@{u}サフィックスを付けた@{upstream}を使用できます。例:

$  git rev-parse --symbolic-full-name master@{u}
refs/remotes/github-mhl/master

...または省略形の場合は、--abbrev-refを追加します

$ git rev-parse --symbolic-full-name --abbrev-ref master@{u}
github-mhl/master

通常、branch@{upstream}構文は、コミットが予想される場所であればどこでも使用できます。

19
Mark Longair

次のシェルスクリプト(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を使用することもできますが、直接アクセスは現在のブランチの出力をフィルタリングするよりもいくらか簡単であることがわかりました。

10
Ingo Karkat

.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/*
8
Karthik
git branch -vv

あなたが求めるものを正確に示します。ローカルブランチと、追跡している対応するリモートブランチが表示されます。

5
Jarl

これらのルーン文字を.gitconfigファイルの[alias]セクションに追加します。

show-tracking = !sh -c 'git ls-remote . |grep `git log -1 --grep="git-svn-id" --format=%H`|Perl -pe "s/[[:alnum:]]+[[:space:]]//"'
2
DaveR

ローカルブランチのリストに作用していたループ内の各ローカルブランチに対応するリモートブランチ(存在する場合)を見つける必要がありました。私は次のものを使用してしまいました:

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

これは、対応するリモートブランチを持たないローカルブランチ( "someremote/somebranch")に対しては何も出力しません(空の文字列)。

0
Ville