개발관련/Git

가장 최근 커밋으로 정렬 된 Git 브랜치 목록을 얻는 방법

Rateye 2021. 11. 16. 10:26
728x90
반응형
질문 : 가장 최근 커밋으로 정렬 된 Git 브랜치 목록을 얻으려면 어떻게해야합니까?

맨 위에 "가장 최신"분기가있는 Git 저장소의 모든 분기 목록을 얻고 싶습니다. 여기서 "가장 최신"분기는 가장 최근에 커밋 된 분기입니다 (따라서 하나 일 가능성이 더 높습니다). 나는 주목하고 싶다).

Git을 사용하여 (a) 최신 커밋별로 분기 목록을 정렬하거나 (b) 기계 판독 가능한 형식으로 각 분기의 마지막 커밋 날짜와 함께 분기 목록을 가져올 수있는 방법이 있습니까?

최악의 경우, 항상 git branch 를 실행하여 모든 분기 목록을 가져오고 출력을 구문 분석 한 다음 git log -n 1 branchname --format=format:%ci for each one, to get each branch 's commit date. 그러나 이것은 새로운 프로세스를 회전시키는 데 상대적으로 비용이 많이 드는 Windows 상자에서 실행되므로 분기가 많은 경우 Git 실행 파일을 분기당 한 번 실행하면 속도가 느려질 수 있습니다. 이 모든 것을 단일 명령으로 수행 할 수있는 방법이 있습니까?

답변

git for-each-ref --sort=-committerdate 옵션을 사용하십시오.

git branch 대해 Git 2.7.0부터 사용할 수 있습니다.

기본 사용법:

git for-each-ref --sort=-committerdate refs/heads/

# Or using git branch (since version 2.7.0)
git branch --sort=-committerdate  # DESC
git branch --sort=committerdate  # ASC

결과

고급 사용법:

git for-each-ref --sort=committerdate refs/heads/ --format='%(HEAD) %(color:yellow)%(refname:short)%(color:reset) - %(color:red)%(objectname:short)%(color:reset) - %(contents:subject) - %(authorname) (%(color:green)%(committerdate:relative)%(color:reset))'

결과

사용당 (Unix):

~/.gitconfig 에 다음 코드 조각을 넣을 수 있습니다. recentb 별칭은 두 가지 인수를 허용합니다.

  • refbranch :에 대해 계산되는 지점 앞서 및 열 뒤에. 기본 마스터
  • count : 표시 할 최근 분기 수. 기본값 20
[alias]
    # ATTENTION: All aliases prefixed with ! run in /bin/sh make sure you use sh syntax, not bash/zsh or whatever
        recentb = "!r() { refbranch=$1 count=$2; git for-each-ref --sort=-committerdate refs/heads --format='%(refname:short)|%(HEAD)%(color:yellow)%(refname:short)|%(color:bold green)%(committerdate:relative)|%(color:blue)%(subject)|%(color:magenta)%(authorname)%(color:reset)' --color=always --count=${count:-20} | while read line; do branch=$(echo \"$line\" | awk 'BEGIN { FS = \"|\" }; { print $1 }' | tr -d '*'); ahead=$(git rev-list --count \"${refbranch:-master}..${branch}\"); behind=$(git rev-list --count \"${branch}..${refbranch:-master}\"); colorline=$(echo \"$line\" | sed 's/^[^|]*|//'); echo \"$ahead|$behind|$colorline\" | awk -F'|' -vOFS='|' '{$5=substr($5,1,70)}1' ; done | ( echo \"ahead|behind||branch|lastcommit|message|author\\n\" && cat) | column -ts'|';}; r"
        

Recentb 별칭 결과

출처 : https://stackoverflow.com/questions/5188320/how-can-i-get-a-list-of-git-branches-ordered-by-most-recent-commit
728x90
반응형