Git gh CLI - 브랜치 관리와 PR 상태 확인

Git CLI와 GitHub CLI인 gh를 함께 쓰면 브라우저를 열지 않고도 풀 리퀘스트 상태, 브랜치 ahead/behind 상태, 원격 브랜치 목록, 병합 후 브랜치 정리까지 터미널에서 처리할 수 있다.

표준 Git은 커밋 이력과 브랜치를 다루고, gh는 GitHub의 PR, 리뷰, CI 상태 같은 플랫폼 정보를 다룬다. 두 도구의 역할을 나누어 쓰면 로컬 Git 상태와 GitHub PR 상태를 함께 관리하기 쉽다.

1. 터미널에서 PR 상태 확인하기

GitHub CLI가 설치되어 있고 로그인되어 있다면 gh pr list로 PR 목록을 확인한다. 공식 문서 기준으로 gh pr list는 기본적으로 열린 PR만 표시하고, --stateopen, closed, merged, all을 지정할 수 있다.

gh auth status
gh pr list

상태별 조회:

# 열린 PR만 보기
gh pr list
gh pr list --state open

# 닫힌 PR만 보기
gh pr list --state closed

# 병합된 PR만 보기
gh pr list --state merged

# 전체 PR 보기
gh pr list --state all

내가 작성한 PR만 보고 싶다면:

gh pr list --author "@me"

현재 브랜치와 연결된 PR의 상태를 보고 싶다면:

gh pr status

gh pr status는 내가 만든 PR, 나에게 리뷰 요청된 PR, 현재 브랜치와 연결된 PR 정보를 한 번에 보여준다. 공식 문서에 따르면 PR 번호, 제목, CI checks, 리뷰 상태 같은 요약 정보도 함께 확인할 수 있다.

2. GitLab에서는 glab 사용

GitLab은 PR 대신 MR, 즉 Merge Request라는 용어를 쓴다. GitLab CLI인 glab을 사용하면 비슷한 방식으로 조회할 수 있다.

# 열린 MR 보기
glab mr list

# 닫힌 MR 보기
glab mr list --closed

# 병합된 MR 보기
glab mr list --merged

# 닫힌 MR과 병합된 MR까지 포함해 보기
glab mr list --all

주의할 점은 gh pr list--state를 쓰지만, 현재 GitLab CLI 공식 문서의 glab mr list--closed, --merged, --all 같은 플래그를 쓴다는 점이다.

3. 브랜치가 뒤처졌는지 확인하기

브랜치 비교 전에는 원격 저장소의 최신 상태를 먼저 가져온다.

git fetch --all

현재 체크아웃한 브랜치가 원격 추적 브랜치보다 뒤처졌는지 확인한다.

git status

예시 메시지:

Your branch is behind 'origin/main' by 3 commits.

이 메시지가 나오면 현재 브랜치가 원격 기준 브랜치보다 뒤처진 상태다.

4. 두 브랜치의 커밋 차이 확인하기

my-feature 브랜치에는 없고 main에는 있는 커밋을 확인한다.

git log my-feature..main --oneline

결과가 출력되면 my-featuremain보다 뒤처진 것이다. 아무것도 출력되지 않으면 해당 방향의 누락 커밋은 없다.

정확한 개수만 보고 싶다면:

git rev-list --count my-feature..main

Ahead와 behind를 한 번에 보고 싶다면 ... 문법과 --left-right --count를 같이 쓴다.

git rev-list --left-right --count my-feature...main

출력 예시:

1   3

my-feature...main 기준으로 첫 번째 숫자는 my-feature에만 있는 커밋 수이고, 두 번째 숫자는 main에만 있는 커밋 수다. 즉 위 예시는 내 브랜치가 1개 커밋 앞서 있고, 3개 커밋 뒤처진 상태다.

5. gh로 GitHub PR 상태 확인하기

표준 Git은 GitHub의 리뷰 상태나 CI 상태를 알지 못한다. GitHub PR의 실제 병합 가능 상태는 gh로 확인하는 편이 좋다.

현재 브랜치의 PR 상태를 본다.

gh pr status

PR의 merge state만 확인한다.

gh pr view --json mergeStateStatus --jq .mergeStateStatus

gh pr view는 인자를 주지 않으면 현재 브랜치에 연결된 PR을 표시한다. JSON 필드에는 mergeStateStatus, mergeable, reviewDecision, statusCheckRollup 등이 포함되어 있으므로 필요한 상태만 뽑아볼 수 있다.

결과가 BEHIND라면 GitHub 웹 UI에서 보이는 “This branch is out-of-date” 상태에 가깝다. 베이스 브랜치에 새 커밋이 생겨 PR 브랜치가 뒤처진 것이다.

6. gh로 PR 브랜치 업데이트하기

PR 브랜치가 베이스 브랜치보다 뒤처졌다면 gh pr update-branch로 업데이트할 수 있다.

gh pr update-branch

리베이스 방식으로 업데이트하려면:

gh pr update-branch --rebase

공식 문서 기준으로 gh pr update-branch는 인자를 생략하면 현재 브랜치에 연결된 PR을 선택한다. 기본 동작은 베이스 브랜치를 PR 브랜치에 merge commit으로 반영하는 것이고, --rebase를 붙이면 최신 베이스 브랜치 위로 rebase한다.

다만 저장소의 branch protection, 권한, merge queue 설정에 따라 동작이 제한될 수 있다.

7. 원격 브랜치 조회하기

원격 브랜치만 나열한다.

git branch -r

로컬과 원격 브랜치를 모두 나열한다.

git branch -a

로컬에 fetch하지 않고 원격 서버의 브랜치 목록을 직접 조회한다.

git ls-remote --heads origin

8. 원격에서 삭제된 브랜치 흔적 정리하기

GitHub에서 PR이 병합되고 원격 브랜치가 삭제되어도 로컬에는 origin/branch-name 형태의 추적 정보가 남을 수 있다. 이런 원격 추적 브랜치 흔적은 prune으로 정리한다.

git fetch --prune

Git 공식 문서에서 git fetch --prune은 원격에 더 이상 존재하지 않는 remote-tracking reference를 fetch 전에 제거한다고 설명한다.

매번 git fetch할 때 자동으로 prune되게 설정하려면:

git config --global fetch.prune true

9. 병합 완료된 로컬 브랜치 정리하기

먼저 기준 브랜치로 이동하고 최신 상태를 가져온다.

git checkout main
git pull origin main

삭제 대상이 될 병합 완료 브랜치를 먼저 확인한다.

git branch --merged | grep -v "^\\*" | grep -v "main" | grep -v "master"

문제가 없을 때만 삭제한다.

git branch --merged | grep -v "^\\*" | grep -v "main" | grep -v "master" | xargs git branch -d

팀에서 develop, staging, release/* 같은 장기 브랜치를 쓴다면 삭제 제외 목록에 추가해야 한다.

요약

작업추천 명령
열린 PR 확인gh pr list
내 PR 확인gh pr list --author "@me"
현재 PR 상태 확인gh pr status
GitHub merge state 확인gh pr view --json mergeStateStatus --jq .mergeStateStatus
PR 브랜치 업데이트gh pr update-branch
원격 최신 상태 가져오기git fetch --all
브랜치 behind 확인git log my-feature..main --oneline
ahead/behind 개수 확인git rev-list --left-right --count my-feature...main
원격 브랜치 목록git branch -r
원격 추적 브랜치 정리git fetch --prune

표준 Git은 커밋과 브랜치의 실제 이력을 확인할 때 적합하고, GitHub CLI는 PR 상태, 리뷰, CI, 브랜치 업데이트처럼 GitHub 플랫폼과 연결된 작업에 적합하다.

참고한 공식 문서