[Git + gh CLI] 터미널에서 끝내는 브랜치 관리와 PR 상태 확인 총정리

마우스에 손을 대지 않고 키보드만으로 개발 흐름을 유지하는 것은 생산성을 높이는 좋은 습관이다. Git CLI와 GitHub 공식 CLI 도구인 gh를 함께 쓰면 풀 리퀘스트(PR) 상태 조회, 브랜치 behind 확인, 원격 브랜치 제어까지 대부분의 협업 흐름을 터미널 안에서 처리할 수 있다.

이 글에서는 브라우저를 열기 전에 터미널에서 먼저 확인하면 좋은 명령어를 실무 흐름 중심으로 정리한다.

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

웹 브라우저를 열지 않아도 현재 어떤 PR이 열려 있고, 닫혔고, 병합되었는지 플랫폼별 CLI 도구로 확인할 수 있다.

GitHub CLI: gh pr list

GitHub CLI가 설치되어 있고 gh auth login으로 인증되어 있다면 gh pr list 명령어로 PR 목록을 조회한다. 기본값은 열린 PR만 표시하는 것이다.

# 열린 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만 보고 싶다면 --author "@me"를 붙인다.

gh pr list --author "@me"

결과 개수를 늘리거나 다른 저장소를 조회할 수도 있다.

gh pr list --limit 50
gh pr list -R owner/repository-name

자세한 옵션은 GitHub CLI의 gh pr list 공식 문서에서 확인할 수 있다.

GitLab CLI: glab mr list

GitLab에서는 PR 대신 MR(Merge Request)이라는 용어를 사용한다. glab mr list는 기본적으로 열린 MR을 보여준다.

# 열린 MR 보기
glab mr list

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

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

# 모든 MR 보기
glab mr list --all

다른 GitLab 저장소를 조회하려면 -R을 사용한다.

glab mr list -R group/project

현재 glab mr list의 상태 필터는 --closed, --merged, --all 형태로 쓰는 것이 명확하다. 자세한 내용은 GitLab CLI의 glab mr list 공식 문서를 기준으로 확인하는 것이 좋다.

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

협업 중에는 main 브랜치에 다른 사람의 커밋이 쌓이면서 내 작업 브랜치가 뒤처지는 일이 자주 생긴다. 비교하기 전에 항상 원격 저장소의 최신 상태를 먼저 가져온다.

git fetch origin

원격에서 삭제된 브랜치 흔적까지 같이 정리하고 싶다면 --prune을 붙인다.

git fetch origin --prune

현재 브랜치 상태 보기

현재 브랜치가 upstream 브랜치보다 앞서 있거나 뒤처졌다면 git status가 이를 알려준다.

git status

더 짧게 보고 싶다면 -sb 옵션을 쓴다.

git status -sb

예를 들어 behind 3처럼 보인다면 현재 브랜치가 upstream 기준으로 3개 커밋 뒤처져 있다는 뜻이다.

기준 브랜치와 커밋 목록 비교하기

작업 브랜치가 origin/main에 비해 무엇을 놓치고 있는지 보려면 다음처럼 비교한다.

# 현재 브랜치에는 없고 origin/main에는 있는 커밋
git log HEAD..origin/main --oneline

특정 브랜치를 명시해서 비교할 수도 있다.

git log my-feature..origin/main --oneline

목록이 출력된다면 뒤처진 상태이고, 아무것도 나오지 않는다면 해당 기준 브랜치에서 새로 가져올 커밋이 없는 상태다.

정확한 커밋 개수 확인하기

몇 개의 커밋이 밀렸는지 숫자로 보고 싶다면 git rev-list --count를 사용한다.

git rev-list --count HEAD..origin/main

앞서 있음(ahead)과 뒤처짐(behind)을 동시에 보려면 삼중 점(...)과 --left-right --count를 함께 쓴다.

git rev-list --left-right --count HEAD...origin/main

출력이 다음과 같다면 첫 번째 숫자는 현재 브랜치에만 있는 커밋 수, 두 번째 숫자는 origin/main에만 있는 커밋 수다.

1   3

즉 현재 브랜치는 기준 브랜치보다 1개 커밋 앞서 있고, 동시에 3개 커밋 뒤처져 있다.

upstream 브랜치와 비교하고 싶다면 @{u}를 사용할 수 있다. 단, 현재 브랜치에 upstream이 설정되어 있어야 한다.

git rev-list --left-right --count HEAD...@{u}

3. gh로 GitHub PR 상태를 더 스마트하게 보기

순수 Git은 커밋 이력과 브랜치 관계를 비교하는 데 강하다. 반면 gh는 GitHub 플랫폼의 PR 상태, 리뷰 상태, 체크 결과까지 함께 보여준다.

현재 계정과 브랜치의 PR 상태 보기

gh pr status

gh pr status는 내가 만든 PR, 나에게 리뷰 요청이 온 PR, 현재 브랜치와 연결된 PR을 요약해서 보여준다. PR을 많이 다루는 저장소에서는 브라우저보다 먼저 실행해 볼 만한 대시보드 역할을 한다.

자세한 옵션은 gh pr status 공식 문서를 참고한다.

GitHub 웹 UI의 behind 상태 확인하기

GitHub 웹 UI에서 보이는 “This branch is out-of-date” 상태는 CLI에서 mergeStateStatus 필드로 확인할 수 있다.

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

결과가 BEHIND라면 베이스 브랜치에 새 커밋이 생겨 현재 PR 브랜치가 뒤처진 상태라는 뜻이다. CLEAN이라면 병합 관점에서 충돌이나 behind 문제가 없는 상태로 볼 수 있다.

필요하면 리뷰 결정과 체크 결과도 함께 가져올 수 있다.

gh pr view --json mergeStateStatus,reviewDecision,statusCheckRollup

사용 가능한 JSON 필드는 gh pr view 공식 문서에서 확인할 수 있다.

명령어 한 줄로 PR 브랜치 업데이트하기

PR 브랜치가 behind 상태라면 GitHub 서버에서 베이스 브랜치의 변경을 현재 PR 브랜치에 반영할 수 있다.

gh pr update-branch

기본 방식 대신 rebase로 반영하고 싶다면 --rebase를 사용한다.

gh pr update-branch --rebase

이 명령은 현재 브랜치에 연결된 PR을 대상으로 동작한다. 특정 PR을 지정해야 한다면 PR 번호, URL, 브랜치명을 인자로 넘긴다.

gh pr update-branch 123

자세한 동작 방식은 gh pr update-branch 공식 문서를 참고한다.

4. 원격 브랜치 조회와 정리

원격 저장소에 어떤 브랜치가 있는지 확인하고, 로컬에 남은 오래된 브랜치 참조를 정리하는 명령도 자주 쓰인다.

원격 브랜치 조회하기

# 원격 브랜치만 나열
git branch -r

# 로컬과 원격 브랜치 모두 나열
git branch -a

# 로컬에 fetch하지 않고 원격 서버의 브랜치 목록 조회
git ls-remote --heads origin

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

GitHub 웹에서 PR이 병합된 뒤 원격 브랜치를 삭제했는데도 로컬 터미널에 origin/feature/... 같은 흔적이 남아 있다면 prune을 실행한다.

git fetch --prune

앞으로 git fetch할 때마다 자동으로 정리되도록 설정할 수도 있다.

git config --global fetch.prune true

병합된 로컬 브랜치 정리하기

이미 main에 병합된 로컬 작업 브랜치를 정리하려면 먼저 목록을 확인한다.

git checkout main
git pull origin main
git branch --merged main

삭제 대상이 맞는지 확인한 뒤, mainmaster를 제외하고 정리한다.

git branch --merged main \
  | sed 's/^[* ]*//' \
  | grep -vE '^(main|master)$' \
  | while read branch; do
      git branch -d "$branch"
    done

git branch -d는 병합되지 않은 브랜치를 삭제하지 않는다. 강제로 지우는 -D는 정말 필요할 때만 사용한다.

요약

  • 단순한 로컬 변경 확인은 git statusgit status -sb로 충분하다.
  • 기준 브랜치와의 ahead/behind 비교는 git log, git rev-list, origin/main, @{u}를 조합해서 확인한다.
  • GitHub PR 상태, 리뷰 상태, 체크 결과는 gh pr statusgh pr view가 더 빠르다.
  • PR 브랜치가 뒤처졌다면 gh pr update-branch로 베이스 브랜치 변경을 반영할 수 있다.
  • 원격 브랜치 흔적은 git fetch --prune으로 정리하고, 병합된 로컬 브랜치는 삭제 전 목록을 확인한다.

터미널에서 모든 것을 처리할 필요는 없다. 하지만 로컬 변경, PR 상태, 브랜치 behind 여부를 CLI로 빠르게 확인할 수 있으면 브라우저로 이동하는 횟수가 줄고 개발 흐름도 훨씬 덜 끊긴다.