WSL에서 CLI로 commit · push · PR까지 (gh 인증 포함)
WSL에서 작업하다 보면 GitHub 웹을 오가지 않고 터미널 안에서 commit → push → PR까지 끝내고 싶어진다. 이 글은 그 흐름 전체를, 특히 처음에 막히는 인증 부분을 포함해 정리한다.
큰 그림
순서는 이렇다.
- git 기본 설정 (이름/이메일)
- GitHub CLI(
gh) 설치 gh인증 + git 자격증명 연결- 브랜치 →
commit→push gh pr create로 PR 생성- (선택)
gh pr merge로 머지
3번까지는 최초 1회만 하면 되고, 이후엔 4~6번만 반복한다.
1. git 기본 설정
커밋에 들어갈 작성자 정보를 먼저 맞춘다. 안 해두면 커밋이 거부되거나 엉뚱한 작성자로 기록된다.
git config --global user.name "Your Name"
git config --global user.email "you@example.com"GitHub의 이메일을 노출하기 싫다면 GitHub가 제공하는 noreply 이메일(Settings → Emails)을 쓰면 된다.
git config --global user.email "12345678+username@users.noreply.github.com"2. GitHub CLI(gh) 설치
WSL(Ubuntu 기준)에는 gh가 기본 탑재돼 있지 않다. apt로 깔되, 우분투 기본 저장소 버전은 오래됐으므로 GitHub 공식 저장소를 추가해서 최신 버전을 받는다.
sudo mkdir -p -m 755 /etc/apt/keyrings
wget -qO- https://cli.github.com/packages/githubcli-archive-keyring.gpg \
| sudo tee /etc/apt/keyrings/githubcli-archive-keyring.gpg > /dev/null
sudo chmod go+r /etc/apt/keyrings/githubcli-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" \
| sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null
sudo apt update
sudo apt install gh설치 확인.
gh --version3. gh 인증 (여기가 핵심)
gh auth login을 실행하면 대화형으로 몇 가지를 물어본다.
gh auth login질문에 이렇게 답하면 된다.
- What account do you want to log into? →
GitHub.com - What is your preferred protocol for Git operations? →
HTTPS(가장 간단) - Authenticate Git with your GitHub credentials? →
Yes - How would you like to authenticate? →
Login with a web browser
마지막 단계에서 터미널에 일회용 코드(one-time code) 가 뜨고, 브라우저로 https://github.com/login/device를 열라고 안내한다.
WSL에서 브라우저가 안 열릴 때
WSL은 GUI 브라우저가 없어서 gh가 브라우저를 자동으로 못 띄우는 경우가 많다. 그럴 땐 터미널에 나온 URL과 코드를 직접 Windows 브라우저에 입력하면 된다.
- 터미널에 표시된 코드(예:
ABCD-1234)를 복사 - Windows 쪽 브라우저에서
https://github.com/login/device접속 후 코드 붙여넣기 - 권한 승인 → 터미널로 돌아오면 인증 완료
매번 직접 여는 게 번거롭다면, WSL에서 Windows 기본 브라우저를 열어주는 도구를 깔아두면 gh가 알아서 띄워준다.
sudo apt install wslu # wslview 명령 제공wslu가 있으면 gh가 wslview를 통해 Windows 브라우저를 자동으로 연다.
토큰(PAT) 방식 대안
브라우저 흐름이 막히면 Personal Access Token으로도 인증할 수 있다. GitHub Settings → Developer settings → Personal access tokens에서 repo 등 권한을 준 토큰을 발급한 뒤:
gh auth login
# How would you like to authenticate? → Paste an authentication token여기에 토큰을 붙여넣으면 된다. CI나 헤드리스 환경에서는 환경변수로도 쓸 수 있다.
echo $GH_TOKEN | gh auth login --with-tokengit과 자격증명 연결
gh auth login 중에 "Authenticate Git with your GitHub credentials? → Yes"를 골랐다면 이미 연결돼 있다. 따로 하고 싶거나 확인하려면:
gh auth setup-git # gh를 git의 credential helper로 등록
gh auth status # 현재 로그인 상태 확인이렇게 해두면 git push가 gh의 토큰을 자격증명으로 재사용하므로, 푸시할 때마다 아이디·비밀번호를 묻지 않는다.
4. 브랜치 → commit → push
이제 일상 작업이다. 보통 main에 직접 올리지 않고 작업 브랜치를 판다.
git switch -c feat/my-feature # 브랜치 생성 + 이동
# ...코드 수정...
git add .
git commit -m "feat: 기능 추가"
git push -u origin feat/my-feature # 원격에 브랜치 첫 푸시(-u로 추적 설정)-u(--set-upstream)는 처음 한 번만 붙이면 되고, 이후엔 git push만으로 같은 브랜치에 올라간다.
5. PR 생성
푸시한 브랜치를 그대로 PR로 만든다.
gh pr create --base main --head feat/my-feature \
--title "기능 추가" \
--body "변경 내용 설명"옵션 없이 gh pr create만 치면 제목·본문을 대화형으로 입력받는다. 현재 브랜치 기준으로 자동 인식하므로 --head는 생략해도 된다.
자주 쓰는 보조 명령.
gh pr view --web # 방금 만든 PR을 브라우저로 열기
gh pr status # 내 PR들의 상태 한눈에 보기
gh pr list # 저장소 PR 목록6. (선택) 머지
리뷰가 끝났다면 터미널에서 바로 머지할 수도 있다.
gh pr merge --squash --delete-branch--squash— 커밋을 하나로 합쳐 머지 (--merge,--rebase도 가능)--delete-branch— 머지 후 원격 브랜치 자동 삭제
한 번에 보는 전체 흐름
# (최초 1회) 설정
git config --global user.name "Your Name"
git config --global user.email "you@example.com"
gh auth login # HTTPS + 브라우저(또는 토큰)
gh auth setup-git
# (반복) 작업 → PR
git switch -c feat/x
git add .
git commit -m "feat: x"
git push -u origin feat/x
gh pr create --fill # --fill: 커밋 메시지로 제목·본문 자동 채움
gh pr merge --squash --delete-branch자주 막히는 지점 정리
gh: command not found— 2번 설치 단계를 건너뛴 것. 공식 저장소 추가 후sudo apt install gh.- 푸시할 때 인증 창이 계속 뜸 —
gh auth setup-git을 안 한 경우. 실행하면 git이 gh 토큰을 재사용한다. - 브라우저가 안 열림 — WSL 특성. URL·코드를 직접 Windows 브라우저에 입력하거나
wslu(wslview)를 설치. - PR이 엉뚱한 브랜치로 생성됨 —
--base(머지 대상)와--head(내 브랜치)를 명시하면 확실하다.
WSL에서도 인증만 한 번 제대로 잡아두면, 그다음부터는 웹을 거치지 않고 commit → push → pr create → merge를 터미널 안에서 매끄럽게 끝낼 수 있다.