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


634

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


11
당신은 당신이 그렇게 그 기본 refspec을 수정 한 의미 git fetchgit 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 fetchgit 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 -agit 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 -agit 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.