어떤 로컬 브랜치가 Git의 어떤 원격 브랜치를 추적하는지 확인하는 방법?


234

어떤 로컬 브랜치가 Git의 어떤 원격 브랜치를 추적하고 있는지 알 수있는 방법이 있는지 알고 싶습니다.

"origin"이라는 하나의 원격 서버를 사용하고 있습니다.


내가 틀렸다면 수정하십시오. 서버가 아닌 기본적으로 origin이라는 원격 지점입니까?
Chris Halcrow

답변:


196

내 Puppet 사본의 예를 사용하여 Github.com의 업스트림 Git 저장소에서 체크 아웃했습니다 ...

$ 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

1
따라서 로컬 브랜치가 몇 개 있지만 꼭두각시의 모든 원격 브랜치를 추적 할 수 있습니다. 명령 결과에 "추적 된"표시가 많이 있다는 것은 무엇입니까? 어느 지역 지점에서 "추적"했습니까?
PJ.

원격 브랜치는 추적 git fetch하거나 git pull원격 브랜치에 대한 업데이트가 복제 된 저장소에서 추적된다는 점에서 추적됩니다. 로컬 브랜치는 단지 원격 브랜치의 로컬 브랜치이므로 원격 브랜치에 대한 업데이트가 추적되고 적절한 명령이 제공 될 때 병합됩니다. 로컬 브랜치를 만들 때 '-t'옵션을 명시 적으로 포함하여 원래 브랜치를 추적합니다. 로컬 지점도 다른 로컬 지점을 추적 할 수 있으므로 원격 지점 일 필요는 없습니다.
Jeremy Bouse

5
@PJ : "트랙"이라는 용어는 Git에서 두 가지 뚜렷한 의미를 갖습니다. 의 "추적"라인 git remote show remote-name을 참조 "추적 가지" (원격 저장소에서 브랜치의 스냅 샷을). "합치기"라인은 "업스트림 브랜치" 구성 ( git 브랜치 또는 git 체크 아웃--track/ -t옵션으로 만들어져 종종 "추적 브랜치"와 혼동 됨)을 갖는 로컬 브랜치를 나타 냅니다.
Chris Johnsen

" 원격 추적 지점 "은 위에서 언급 한 "추적 지점"에 대한 최신 용어집 항목입니다. 이 문서는 8b3f3f84 에서 업데이트되었습니다 .
ento

124

모든 지점 :

git branch -avv

현지 지점 만 해당 :

git branch -lvv

원격 지점에만 해당 :

git branch -rvv

업스트림 지점의 이름뿐만 아니라 모든 지점을 보여줍니다.


2
이것은 지금까지 가장 간단하고 완전한 답변입니다!

6
git 버전 1.7.7.5에서 이것은 로컬 브랜치와 그것이 가리키는 sha-1을 보여 주지만 추적 된 원격 브랜치를 표시하지 않습니다 ...
mpontillo

git 버전 1.7.4.1에서 나를 위해 작동합니다. 두 번째 'v'는 원격 추적 분기를 표시해야합니다.
피터 존슨

4
출력을 줄이려면 git branch -lvv업스트림이있는 로컬 브랜치 만 유용 할 수 있습니다.
AB

5
^ git branch -vv나를 위해 일한다…
notacouch

52

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학습 %(upstream)에 토큰을 힘내 1.6.3 . 이전 버전의 Git에서는 git config branch.<name>.remote및로 추적 정보를 추출해야합니다 git config branch.<name>.merge( git for-each-ref각각의 로컬 브랜치 이름에 대한 명령을 빌드하는 데 사용 ).


귀하의 답변 출력이 훨씬 간결하고 따르기 쉽기 때문에 투표권을 얻습니다 :)
CubanX

덜 간결하게,하지만 시각적으로 원격 이름이 공통의 자식 잡았다 로컬 브랜치의 이름과 동일한 지 확인하는 좋은 방법을 제공한다 : bash는git for-each-ref --format=$'\n'' '' '' '' '' '' ''/%(refname:short);%(upstream:short)' refs/heads | tr ';' $'\n'
호브

19

특정 지점의 경우, 사용할 수 있습니다 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}커밋이 필요할 때마다 구문을 사용할 수 있습니다 .


1
+1 당신의 대답은 저에게 꼭 필요한 것입니다 : git rev-parse --symbolic-full-name HEADvs. git rev-parse --symbolic-full-name HEAD@{u}, 감사합니다!
Tino

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있지만 직접 액세스는 현재 분기의 출력을 필터링하는 것보다 다소 간단하다는 것을 알았습니다.


스크립트 상단에서 "set -e"사용을 고려할 수 있습니다. 그러면 "|| exit $?"의 모든 인스턴스를 제거 할 수 있습니다. 동일한 초기 고장 동작을 유지하면서.
John Whitley

@ JohnWhitley : 감사합니다. 답변을 편집했습니다. 에 대해 알고 set -e있지만 일반적으로 명시적인 검사를 고수합니다. 그러나이 경우에는 정말 좋습니다.
Ingo Karkat

나를 위해 작동하지 않습니다 git version 1.9.4.
Ain

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/*

5
git branch -vv

당신이 요구하는 것을 정확하게 보여줍니다. 추적중인 해당 원격 분기와 함께 로컬 분기를 표시합니다.


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:]]//"'

0

로컬 분기 목록에서 작동하는 루프 내에서 각 로컬 분기에 해당하는 원격 분기 (있는 경우)를 찾아야했습니다. 나는 다음을 사용하여 끝났다.

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

원격 분기가없는 로컬 분기 ( "someremote / somebranch")에 대해서는 아무것도 출력하지 않습니다 (빈 문자열).


-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.


3
그들은 가지를 보여 주지만 어느 것을 추적하고 있는지 이해할 수 없습니다.
PJ.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.