Git 1.7 이상에서 모든 원격 브랜치를 어떻게 나열합니까?


634

시도 git branch -r했지만 로컬에서 추적 한 원격 지점 만 나열합니다. 내가 가지고 있지 않은 사람들의 목록을 어떻게 찾습니까? (명령에 모든 원격 분기가 나열되는지 추적되지 않는 분기 만 나열되는지는 중요하지 않습니다 .)


11
당신은 당신이 그렇게 그 기본 refspec을 수정 한 의미 git fetch와 git remote update모든 원격의 가지를 가져 오지 않는다? 그렇지 않으면 당신은 그냥 가져 와서 사용할 수 있기 때문에 git branch -r...
— Cascabel

2
나는 있어야한다. git branch -r로컬에서 추적 한 원격 지점 만 표시하고있었습니다. 지금은 더 잘 작동합니다.
— James A. Rosen

답변:


804

이곳 방문자의 대다수는 [ Git 1.7+의 모든 원격 브랜치를 어떻게 나열합니까? "라는 질문에 대한 정확하고 간단한 답변입니다. 입니다 :

git branch -r

소수의 경우 [1] git branch -r 이 작동하지 않습니다. 만약 git branch -r하지 작업 시도하지 :

git ls-remote --heads <remote-name>

경우 git branch -r없는 작업을 수행 어쩌면로 Cascabel는 말한다 "당신이 그렇게하는 것이 기본 refspec을 수정 한 git fetch및 git remote update모든 가져 오지 않습니다 remote의 가지를" .


[1] 이 각주 2018-Feb의 글을 쓰고있는 동안, 나는 의견을보고 git branch -r대다수 의 작품 ( 140 개 중 약 90 % 또는 125 개)을 보았습니다 .

경우 git branch -r없는 작업을 수행, 검사는 git config --get remote.origin.fetch와일드 카드 (포함 *에 따라) 이 답변


15
당신은 또한 할 수있는 git ls-remote [url]당신이 :) 먼저 복제 할 필요가 없습니다
— Zsub

142
이 답변은 정확하지만 오해의 소지가 있습니다. 사용자가 검색 엔진에서 가장 먼저 보게되는 것은 다음과 같습니다. git branch -r정확하고 간단한 답변이므로, asker는 git branch -r대부분의 사용자가 여기에 오는 행동을 수정 한 특별한 경우가있었습니다. 있다
— Stephan

24
@Stephan : 확실합니까? git branch -r또한 나를 위해 일하지 않았다. 이미 현지에서 추적 한 지점을 나열한 것입니다. 그러나 git ls-remote --heads원격 저장소에서 사용할 수있는 모든 지점을 나열했습니다.
— rexford

2
를 통해 나열된 분기 git ls-remote(및에 나열되지 않음 git branch -r) 에서 가져 오려면 stackoverflow.com/a/26649770/873282에git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*" 설명 된대로 가져 오기 전에 실행 해야 합니다.
— koppor

11
git fetch --all현재 모든 원격 브랜치를 가져 오기 전에 수행 해야합니다.
— A. Attia

173

remote show 로컬로 추적되지 않은 분기 및 아직 가져 오지 않은 분기를 포함하여 원격의 모든 분기를 표시합니다.

git remote show <remote-name>

또한 로컬 저장소와 관련된 지점의 상태를 표시하려고 시도합니다.

> git remote show origin
* remote origin
  Fetch URL: C:/git/.\remote_repo.git
  Push  URL: C:/git/.\remote_repo.git
  HEAD branch: master
  Remote branches:
    branch_that_is_not_even_fetched new (next fetch will store in remotes/origin)
    branch_that_is_not_tracked      tracked
    branch_that_is_tracked          tracked
    master                          tracked
  Local branches configured for 'git pull':
    branch_that_is_tracked merges with remote branch_that_is_tracked
    master                 merges with remote master
  Local refs configured for 'git push':
    branch_that_is_tracked pushes to branch_that_is_tracked (fast-forwardable)
    master                 pushes to master                 (up to date)

바로 그거죠. 가져 오지 않고 로컬에서 추적하지 않습니다.
— Thufir

3
branch_that_is_not_tracked tracked?
— Piotr Dobrogost

3
@PiotrDobrogost 네! branch_that_is_not_tracked로컬 자식 분기에 의해 추적되지 않는 분기입니다. 그러나 로컬 리포지토리로 가져 왔으므로 원격 브랜치가 있습니다. 이상한 이유로 원격을 추적하는 로컬 분기가 없더라도이 git remote show상태를 호출합니다 tracked. 이 경우 반대의 trackedis는 new"가져 오지 않음"을 의미합니다.
— Klas Mellbourn

이것은 프로그래밍 방식으로 작동하지
— Alexander Mills

이것은 내가 원격 지점에서 로컬로 원격 지점을 뽑은 곳에서 가져온 특별한 경우를 포착했습니다. 그런 다음 git branch -r여전히 원격 브랜치가 있음을 제안하지만 git remote show origin그 사실을 보여줍니다 refs/remotes/origin/my-now-dead-branch stale (use 'git remote prune' to remove). 훨씬 더 유용합니다!
— icc97

53
git branch -a | grep remotes/*

10
이것은 기본적으로와 동일 git branch -r하며 OP가 충분하지 않다고 말했습니다.
— Cascabel

9
실제로 둘 git branch -a과 git branch -r나를 위해 모든 원격 지점을 나열 나는 확실히 어떤 영업 이익은 말했다 것은 참이면 아니에요. 방금 테스트 저장소를 설정하고 이것을 확인했습니다 (마스터 추적 원점 / 마스터 만 있었지만 여전히 두 플래그가있는 모든 원격 지점을 보았습니다).
— Idan K

2
기존의 가져온 저장소에서 복제 한 다음 수동으로 git 서버에서 원점을 가리키면 모든 원격 분기가 나열되지 않는 것 같습니다. 수락 된 답변이이 경우를 처리합니다.
— nielsbot

이 솔루션은 내가 마지막으로 가져온 이후 생성 된 원격 브랜치를 나열하지 않는 것 같습니다.
— Anubian Noob

이상한 것은 : 내가 사용했습니다 년 동안 git fetch다음에 git branch -a최근에 시작한이 나를 위해 실패합니다. 아마도 자식 동작이 변경 되었습니까?
— Sebastian Mach

39

사용하면 git branch -r모든 원격 분기가 git branch -a나열되고 모든 분기가 로컬 및 원격에 나열됩니다. 이 목록은 구식입니다. 이 목록을 최신 상태로 유지하려면 다음을 실행하십시오.

git remote update --prune

원격에서 모든 새로운 지점으로 로컬 지점 목록을 업데이트하고 더 이상 존재하지 않는 항목을 제거합니다. --prune없이이 업데이트 명령을 실행하면 새 분기가 검색되지만 더 이상 원격에서 분기되지는 않습니다.

리모컨을 지정하여이 업데이트 속도를 높일 수 있습니다. 그렇지 않으면 추가 한 모든 리모컨에서 업데이트를 가져옵니다.

git remote update --prune origin

이 문제가 해결되었습니다- 'git branch -r'이 이제 작동합니다.
— Francis Norton

27

그러나

git branch -ar

해야합니다.


41
두 인수를 모두 전달하는 것은 중복됩니다. 원격 브랜치 만-r 반환 합니다 . -a로컬 및 원격 분기를 모두 반환합니다 . 따라서, git branch -a및 git branch -ar모두 동일한 결과를 얻었다.
— Walter Roman

19

당신은 또한 할 수 git fetch다음에 git branch -r. 가져 오기가 없으면 최신 분기가 표시되지 않습니다.


git fetch --all현재 모든 지점을 갖기 위해
— A. Attia

19

힘내 분기-원격 지점

git ls-remote

힘내 문서 .


자식 LS-원격 --heads은보다 구체적인 결과를 얻을 수 있습니다
— 볼프강 Fahl

1
또한이없이 실수로 밀어 내 지점을 나열하는 유일한 명령입니다 heads/에 refs/heads/features/my-branch, 감사합니다!
— msa


9

TL; TR;

이것이 문제의 해결책입니다.

git remote update --prune    # To update all remotes
git branch -r                # To display remote branches

또는:

git remote update --prune    # To update all remotes
git branch <TAB>             # To display all branches

5

실행하는 가장 좋은 명령은 git remote show [remote]입니다. 그러면 원격 및 로컬, 추적 및 추적되지 않은 모든 지점이 표시됩니다.

다음은 오픈 소스 프로젝트의 예입니다.

> git remote show origin
* remote origin
  Fetch URL: https://github.com/OneBusAway/onebusaway-android
  Push  URL: https://github.com/OneBusAway/onebusaway-android
  HEAD branch: master
  Remote branches:
    amazon-rc2                   new (next fetch will store in remotes/origin)
    amazon-rc3                   new (next fetch will store in remotes/origin)
    arrivalStyleBDefault         new (next fetch will store in remotes/origin)
    develop                      tracked
    master                       tracked
    refs/remotes/origin/branding stale (use 'git remote prune' to remove)
  Local branches configured for 'git pull':
    develop merges with remote develop
    master  merges with remote master
  Local refs configured for 'git push':
    develop pushes to develop (local out of date)
    master  pushes to master  (up to date)

원격 브랜치를 얻으려면을 사용할 수 있습니다 grep. 사용하려는 명령은 다음과 같습니다.

grep "\w*\s*(new|tracked)" -E

이 명령으로 :

> git remote show origin | grep "\w*\s*(new|tracked)" -E
    amazon-rc2                   new (next fetch will store in remotes/origin)
    amazon-rc3                   new (next fetch will store in remotes/origin)
    arrivalStyleBDefault         new (next fetch will store in remotes/origin)
    develop                      tracked
    master                       tracked

이에 대한 별명을 작성할 수도 있습니다.

git config --global alias.branches "!git remote show origin | grep \w*\s*(new|tracked) -E"

그럼 당신은 그냥 실행할 수 있습니다 git branches.




4

git fetch명령을 실행하십시오 . 모든 원격 브랜치를 로컬 저장소로 가져온 다음 git branch -a모든 브랜치를 나열 하기 위해 를 수행합니다 .


1

알고있는 원격 지점이 있지만 목록에 표시되지 않는 경우 다음을 사용하여 오리진이 올바르게 설정되었는지 확인할 수 있습니다.

git remote show origin

이것이 모두 좋으면 업데이트를 실행해야 할 수도 있습니다.

git remote update

성공적으로 실행되면 다른 답변의 내용을 수행 할 수 있어야합니다.

git branch -r

1

이 명령을 사용하여

git log -r --oneline --no-merges --simplify-by-decoration --pretty=format:"%n %Cred CommitID %Creset: %h %n %Cred Remote Branch %Creset :%d %n %Cred Commit Message %Creset: %s %n"

CommitID       : 27385d919
Remote Branch  : (origin/ALPHA)
Commit Message :  New branch created

커밋 메시지 및 커밋 ID를 포함하여 모든 리모트 브랜치를 나열합니다.


1

나는 사용할 것이다 :

git branch -av

이 명령은로 시작하는 원격 브랜치를 포함하여 모든 브랜치의 목록을 보여줄 /remote뿐만 아니라 *업데이트 한 내용과 마지막 커밋 주석에 대한 피드백을 제공합니다 .


0

나열하는 원격 출처가 실제로 원하는 저장소이며 이전 복제본이 아닌지 확인하십시오.


0

결국 원하는 것을 얻기 위해 엉망 쉘 파이프 라인을 만들었습니다. 방금 원점 원격에서 분기를 병합했습니다.

git branch -r --all --merged \
    | tail -n +2 \
    | grep -P '^  remotes/origin/(?!HEAD)' \
    | perl -p -e 's/^  remotes\/origin\///g;s/master\n//g'

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.