로컬 지점에서 어떤 원격 지점을 추적하는지 확인


842

참조 :
어떤 Git 브랜치가 어떤 원격 / 업스트림 브랜치를 추적하는지 어떻게 알 수 있습니까?

로컬 지점에서 어떤 원격 지점을 추적하고 있는지 어떻게 알 수 있습니까?

git config출력 을 구문 분석해야합니까 , 아니면 이것을 수행하는 명령이 있습니까?


18
esh. 이것은 정확히 중복 되지 않습니다 . 이것은 다른 것의 일부이지만, 같은 질문을하는 다른 방법이 있습니다 git remote show origin. 다른 질문의 주된 대답은 여기에 간단한 대답으로 둘러 싸인 bash 스크립트이며 일부는 유용 할 수 있습니다. 이 질문이 완전히 닫히지 않기를 바랍니다.
cdunn2001

5
동의, 이것은 분명히 속지 않아야합니다. 그것은 연결된 질문과 완전히 다른 것을 요구하고 있습니다
Adam Batkin

답변:


1002

다음 은 모든 추적 분기 ( 'pull'에 대해 구성된)를 제공하는 명령입니다.

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

SHA와 긴 줄 바꿈 커밋 메시지를 통과해야하지만 빠르게 입력하면 추적 지점이 세 번째 열에 세로로 정렬됩니다.

분기당 '풀'및 '푸시'구성에 대한 정보가 필요한 경우의 다른 답변을 참조하십시오 git remote show origin.


최신 정보

자식 버전부터 1.8.5는 상류 지점을 표시 할 수 있습니다 git statusgit status -sb


6
이 출력은 git branch -av또는 보다 직접적이며 git remote show origin, 추적 된 리모콘뿐만 아니라 많은 데이터를 제공합니다.
SimplGy

60
BTW, 자식 (1.8.5.x)의 최신 버전은 현재시 상류 지점을 표시 git status하고 git status -sb- 당신이 1.8.5.x로 업그레이드 그래서 일단,이 질문 (과 답변) 무관하다.
jdsumsion

11
이것은 당신에게 원하는 정보를 제공하지만, 나는 그것이 정답이라는 것에 동의하지 않습니다. 다른 사람에게 사전에 "XYZ를 어떻게 쓰나요?"라는 대답을주는 것과 같은 방법입니다. 예를 들어, 일부 작업에 대해 결과 답변 (지점 이름)을 사용하려고합니다.이 답변은 시각적으로 만 도움이됩니다 ... 후속 명령에서 사용할 수있는 것은 아닙니다.
UpAndAdam

커밋 메시지가 예를 들어 "[my-feature] ..."로 쉽게 시작될 수 있으므로이 명령의 출력이 잘못 될 수 있습니다. 업스트림 브랜치 (있는 경우) 만 표시하고 다른 것은 표시하지 않는 @ cdunn2001의 답변을 참조하십시오.
조나스 베를린

1
@ jonas-berlin에 동의합니다. 결과를 파싱하려면 cdunn2001의 대답이 더 좋습니다. 간단한 명령을 찾고 출력을 시각적으로 스캔하려는 경우 제 대답은 좋습니다
jdsumsion

372

두 가지 선택 :

% 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

12
좋은! 첫 번째 것은 아무것도 추적되지 않는 경우 추악한 오류를 발생시키는 반면, 두 번째는 특히 스크립팅에 도움이됩니다. BTW %(refname:short)는 안에있는 현재 심판의 이름입니다 --format.
티노

9
git help revisions(문서에서 거의 알려지지 않았지만 가장 유용한 부분 중 하나)를 검색하십시오 upstream.
cdunn2001

15
이 답변은 같은 것을하고 싶지 특히, 위의 두 답변보다 훨씬 낫다git diff `git rev-parse --abbrev-ref --symbolic-full-name @{upstream}`
지앤

2
이것은 정말 유용합니다echo 'git for-each-ref --format=\'%(refname:short) -> %(upstream:short)\' refs/heads/$1' > ~/bin/git-show-upstream; chmod +x ~/bin/git-show-upstream
albfan

6
다른 지점의 업스트림을 찾으려면 두 번째 선택의 변형은 git for-each-ref --format='%(upstream:short)' $(git rev-parse --symbolic-full-name SOMEBRANCH)SOMEBRANCH를 지점 이름으로 바꾸거나 현재 지점의 "HEAD"로 바꾸는 것입니다.
Jonas Berlin

220

나는 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)

3
업스트림 브랜치 를 검색 하는 명령이 필요 하므로 입력으로 'origin'을 사용하는 것으로 가정하므로 이것이 작동하지 않습니다
Alexander Mills

1
그러나 이것은 OP에 대답합니다. 이 명령 git remote show origin은 로컬 분기와 푸시 및 풀 모두에 대해 추적하는 것을 보여줍니다.
dudewad

1
@dudewad 요점은이 명령이 리모컨을 호출한다고 가정하지만 origin실제로는 무엇이든 될 수 있다고 생각합니다 (예 : 여러 가지가 다른 리모컨의 분기를 추적하는 여러 리모컨).
Ruslan

74

업데이트 : 글쎄, 내가 게시한지 몇 년이 지났습니다! 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

2
이것은 현재 브랜치에 관계없이 별칭을 만드는 데 매우 유용했습니다. 감사!
저스틴 스파 어-여름

작업이 빨리 진행되는 한 로컬 추적 분기를 원격으로 진행시키는 'fastforward'별칭에도 유용합니다.
Altreus

4
실제로 나는 이것이 git name-rev --name-only HEAD당신이 실제로 어떤 지점에 있는지 알려주지 않는다는 것을 발견 했습니다. 내가 방금 사용한git branch | grep '^\*' | cut -d' ' -f2
Altreus

1
감사! 비슷한 질문에 대한 다른 답변은 @{u}별칭 / 바로 가기를 언급하지 않았으며 그것이 바로 내가 찾던 것입니다! 당길 필요가 있는지 여부 만 결정하려는 경우 마스터 브랜치와 비교할 이유가 없습니다.
Dan M.

1
@{u}폭탄입니다. 그리고 1.7.0 이후로 사용되었습니다 .2018 년에 누군가가 사용하고있는 자식에서 사용할 수 없다면 아마도 업그레이드가 필요한 것입니다.
크리스 클리 랜드

48

현지 지점과 리모컨.

git branch -vv 

모든 지점 및 추적 리모컨.

git branch -a -vv

로컬 브랜치가 푸시 앤 풀을 위해 명시 적으로 구성된 위치를 확인하십시오.

git remote show {remote_name}

21

현재있는 지점을 보여줍니다.

$ 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

19

git checkout"현재 분기 확인"과 같은을 사용할 수 있습니다 . 이것은 현재 브랜치에 대한 추적 정보가있는 경우 부작용을 나타내는 no-op입니다.

$ git checkout 
Your branch is up-to-date with 'origin/master'.

17

이것이 git config의 출력을 파싱하는 것으로 계산되는지는 모르겠지만 마스터가 추적하는 원격의 URL을 결정합니다.

$ git config remote. $ (git config branch.master.remote) .url

또는 URL에 대해 현재 분기 git config branch.$(git symbolic-ref -q HEAD).remote에서 추적중인 원격 장치의 이름을 원할 경우 . git config remote.$(git config branch.$(git symbolic-ref -q HEAD).remote).url
Anakhand 2018

--short작동하도록 옵션 을 추가 해야했습니다. 따라서 현재 지점의 원격 이름을 얻고 현재 지점 git config branch.$(git symbolic-ref -q --short HEAD).remote의 원격 URL을 가져 git config remote.$(git config branch.$(git symbolic-ref -q --short HEAD).remote).url
Nelson

13

또 다른 방법

git status -b --porcelain

이것은 당신에게 줄 것이다

## BRANCH(...REMOTE)
modified and untracked files

10

또 다른 간단한 방법은

cat .git/config 자식 저장소에서

현지 지사에 대한 세부 정보가 표시됩니다.


리눅스에서 잘 작동합니다. 유닉스 계열 프롬프트 (예 : cygwin 또는 git bash)가 아닌 경우 Windows에서 작동하지 않습니다.
Contango

Windows에서는 단순히 일반 명령 줄 type .git/config대신 사용하십시오 cat .git/config.
khmarbaise

9

존재하는지 여부를 알고 싶다면 다른 방법 (osse에게 감사) :

if git rev-parse @{u} > /dev/null 2>&1
then
  printf "has an upstream\n"
else
  printf "has no upstream\n"
fi

어떤 언어? 이것은 Linux 쉘 스크립트처럼 보이지만 다른 정보 나 컨텍스트는 제공하지 않습니다.
Suncat2000

8

git branch -vv | grep 'BRANCH_NAME'

git branch -vv :이 부분에는 모든 로컬 지점과 업스트림 지점이 표시됩니다.

grep 'BRANCH_NAME' : 분기 목록에서 현재 분기를 필터링합니다.



5

로컬 및 원격 분기를 모두 나열합니다.

$ git branch -ra

산출:

  feature/feature1
  feature/feature2
  hotfix/hotfix1
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/develop
  remotes/origin/master

3

git-status porcelain (machine-readable) v2 출력은 다음과 같습니다 :

$ git status -b --porcelain=v2
# branch.oid d0de00da833720abb1cefe7356493d773140b460
# branch.head the-branch-name
# branch.upstream gitlab/the-branch-name
# branch.ab +2 -2

그리고 지점을 업스트림으로 가져 오려면 :

$ git status -b --porcelain=v2 | grep -m 1 "^# branch.upstream " | cut -d " " -f 3-
gitlab/the-branch-name

분기에 업스트림이 없으면 위의 명령은 빈 출력을 생성합니다 (또는 실패 set -o pipefail).


2

어떤 분기 의 업스트림을 찾으려면 (현재있는 것과는 달리) @ cdunn2001의 답변을 약간 수정하십시오.

git rev-parse --abbrev-ref --symbolic-full-name YOUR_LOCAL_BRANCH_NAME@{upstream}

그러면 로컬 지사에 대한 원격 지사 이름이으로 지정 YOUR_LOCAL_BRANCH_NAME됩니다.


2

당신은 이것을 시도 할 수 있습니다 :

git remote show origin | grep "branch_name"

branch_name 당신의 지점으로 교체해야합니다


지점 이름이 다른 지점과도 일치하면 어떻게됩니까? 분기 이름은 git remote show origin- merges또는 configure?
Tom Swirly

당신을 얻지 못했습니다. 같은 이름을 가진 여러 개의 지점을 의미합니까
xpioneer

1

이 별칭을 사용합니다

git config --global alias.track '!sh -c "
if [ \$# -eq 2 ]
 then
   echo \"Setting tracking for branch \" \$1 \" -> \" \$2;
   git branch --set-upstream \$1 \$2;
 else
   git for-each-ref --format=\"local: %(refname:short) <--sync--> remote: %(upstream:short)\" refs/heads && echo --URLs && git remote -v;
fi  
" -'

그때

git track

스크립트를 사용하여 추적을 설정할 수도 있습니다.

https://github.com/orefalo/bash-profiles 에서 더 훌륭한 별칭


0

내가 사용하는 EasyGit를 (일명 "예") (또는 측면을 따라) 망할 놈의 상단에 초경량 래퍼. EasyGit에는 현재 분기 원격 추적 분기를 포함하여 모든 종류의 유용한 정보를 제공하는 "info"하위 명령이 있습니다. 다음은 예입니다 (현재 분기 이름은 "foo").

pknotz @ s883422 : (foo) ~ / workspace / bd
$ 예를 들어 정보
총 커밋 : 175
로컬 저장소 : .git
명명 된 원격 저장소 : (이름-> 위치)
  원산지-> git : //sahp7577/home/pknotz/bd.git
현재 지점 : foo
  암호화 체크섬 (sha1sum) : bd248d1de7d759eb48e8b5ff3bfb3bb0eca4c5bf
  기본 풀 / 푸시 저장소 : origin
  기본 풀 / 푸시 옵션 :
    branch.foo.remote = 원산지
    branch.foo.merge = 심판 / 헤드 / aal_devel_1
  기여자 수 : 3
  파일 수 : 28
  디렉토리 수 : 20
  가장 큰 파일 크기 (바이트) : 32473 (pygooglechart-0.2.0 / COPYING)
  커밋 : 62

0

이 답변을 개선 하면서 다음과 같은 .gitconfig별칭을 찾았습니다.

branch-name = "symbolic-ref --short HEAD"
branch-remote-fetch = !"branch=$(git branch-name) && git config branch.\"$branch\".remote || echo origin #"
branch-remote-push  = !"branch=$(git branch-name) && git config branch.\"$branch\".pushRemote || git config remote.pushDefault || git branch-remote-fetch #"
branch-url-fetch = !"remote=$(git branch-remote-fetch) && git remote get-url        \"$remote\" #"  # cognizant of insteadOf
branch-url-push  = !"remote=$(git branch-remote-push ) && git remote get-url --push \"$remote\" #"  # cognizant of pushInsteadOf

어떤 언어입니까?
Daniel Farrell

3
@ Dan Farrell : 쉘. !로 시작하는 별칭 / bin / sh를 사용하십시오. 큰 따옴표는 git의 설정 파일에 인용됩니다.
Tom Hale

0

Gradle을 사용하는 경우

def gitHash = new ByteArrayOutputStream()
    project.exec {
        commandLine 'git', 'rev-parse', '--short', 'HEAD'
        standardOutput = gitHash
    }

def gitBranch = new ByteArrayOutputStream()
    project.exec {
        def gitCmd = "git symbolic-ref --short -q HEAD || git branch -rq --contains "+getGitHash()+" | sed -e '2,\$d'  -e 's/\\(.*\\)\\/\\(.*\\)\$/\\2/' || echo 'master'"
        commandLine "bash", "-c", "${gitCmd}"
        standardOutput = gitBranch
    }

-2

다음 명령은 원격 원점 현재 포크를 참조합니다.

자식 원격 -v

원격 경로를 추가하려면

git remote add origin 경로 _ 이름


여기 당신은 원격 경로를 찾을 수 없습니다-당신은 추가
serup
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.