최근 수정 시각 : 2025-04-25 17:56:32

GitHub CLI


파일:다른 뜻 아이콘.svg  
#!if 넘어옴1 != null
'''gh'''{{{#!if 넘어옴2 != null
, ''''''}}}{{{#!if 넘어옴3 != null
, ''''''}}}{{{#!if 넘어옴4 != null
, ''''''}}}{{{#!if 넘어옴5 != null
, ''''''}}}{{{#!if 넘어옴6 != null
, ''''''}}}{{{#!if 넘어옴7 != null
, ''''''}}}{{{#!if 넘어옴8 != null
, ''''''}}}{{{#!if 넘어옴9 != null
, ''''''}}}{{{#!if 넘어옴10 != null
, ''''''}}}은(는) 여기로 연결됩니다. 
#!if 설명 == null && 리스트 == null
{{{#!if 설명1 == null
다른 뜻에 대한 내용은 아래 문서를}}}{{{#!if 설명1 != null
{{{#!html 한국의 연예기획사}}}에 대한 내용은 [[GH엔터테인먼트]] 문서{{{#!if (문단1 == null) == (앵커1 == null)
를}}}{{{#!if 문단1 != null & 앵커1 == null
의 [[GH엔터테인먼트#s-|]]번 문단을}}}{{{#!if 문단1 == null & 앵커1 != null
의 [[GH엔터테인먼트#|]] 부분을}}}}}}{{{#!if 설명2 != null
, {{{#!html }}}에 대한 내용은 [[]] 문서{{{#!if (문단2 == null) == (앵커2 == null)
를}}}{{{#!if 문단2 != null & 앵커2 == null
의 [[#s-|]]번 문단을}}}{{{#!if 문단2 == null & 앵커2 != null
의 [[#|]] 부분을}}}}}}{{{#!if 설명3 != null
, {{{#!html }}}에 대한 내용은 [[]] 문서{{{#!if (문단3 == null) == (앵커3 == null)
를}}}{{{#!if 문단3 != null & 앵커3 == null
의 [[#s-|]]번 문단을}}}{{{#!if 문단3 == null & 앵커3 != null
의 [[#|]] 부분을}}}}}}{{{#!if 설명4 != null
, {{{#!html }}}에 대한 내용은 [[]] 문서{{{#!if (문단4 == null) == (앵커4 == null)
를}}}{{{#!if 문단4 != null & 앵커4 == null
의 [[#s-|]]번 문단을}}}{{{#!if 문단4 == null & 앵커4 != null
의 [[#|]] 부분을}}}}}}{{{#!if 설명5 != null
, {{{#!html }}}에 대한 내용은 [[]] 문서{{{#!if (문단5 == null) == (앵커5 == null)
를}}}{{{#!if 문단5 != null & 앵커5 == null
의 [[#s-|]]번 문단을}}}{{{#!if 문단5 == null & 앵커5 != null
의 [[#|]] 부분을}}}}}}{{{#!if 설명6 != null
, {{{#!html }}}에 대한 내용은 [[]] 문서{{{#!if (문단6 == null) == (앵커6 == null)
를}}}{{{#!if 문단6 != null & 앵커6 == null
의 [[#s-|]]번 문단을}}}{{{#!if 문단6 == null & 앵커6 != null
의 [[#|]] 부분을}}}}}}{{{#!if 설명7 != null
, {{{#!html }}}에 대한 내용은 [[]] 문서{{{#!if (문단7 == null) == (앵커7 == null)
를}}}{{{#!if 문단7 != null & 앵커7 == null
의 [[#s-|]]번 문단을}}}{{{#!if 문단7 == null & 앵커7 != null
의 [[#|]] 부분을}}}}}}{{{#!if 설명8 != null
, {{{#!html }}}에 대한 내용은 [[]] 문서{{{#!if (문단8 == null) == (앵커8 == null)
를}}}{{{#!if 문단8 != null & 앵커8 == null
의 [[#s-|]]번 문단을}}}{{{#!if 문단8 == null & 앵커8 != null
의 [[#|]] 부분을}}}}}}{{{#!if 설명9 != null
, {{{#!html }}}에 대한 내용은 [[]] 문서{{{#!if (문단9 == null) == (앵커9 == null)
를}}}{{{#!if 문단9 != null & 앵커9 == null
의 [[#s-|]]번 문단을}}}{{{#!if 문단9 == null & 앵커9 != null
의 [[#|]] 부분을}}}}}}{{{#!if 설명10 != null
, {{{#!html }}}에 대한 내용은 [[]] 문서{{{#!if (문단10 == null) == (앵커10 == null)
를}}}{{{#!if 문단10 != null & 앵커10 == null
의 [[#s-|]]번 문단을}}}{{{#!if 문단10 == null & 앵커10 != null
의 [[#|]] 부분을}}}}}}
#!if 설명 == null
{{{#!if 리스트 != null
다른 뜻에 대한 내용은 아래 문서를}}} 참고하십시오.

#!if 리스트 != null
{{{#!if 문서명1 != null
 * {{{#!if 설명1 != null
한국의 연예기획사: }}}[[GH엔터테인먼트]] {{{#!if 문단1 != null & 앵커1 == null
문서의 [[GH엔터테인먼트#s-|]]번 문단}}}{{{#!if 문단1 == null & 앵커1 != null
문서의 [[GH엔터테인먼트#|]] 부분}}}}}}{{{#!if 문서명2 != null
 * {{{#!if 설명2 != null
: }}}[[]] {{{#!if 문단2 != null & 앵커2 == null
문서의 [[#s-|]]번 문단}}}{{{#!if 문단2 == null & 앵커2 != null
문서의 [[#|]] 부분}}}}}}{{{#!if 문서명3 != null
 * {{{#!if 설명3 != null
: }}}[[]] {{{#!if 문단3 != null & 앵커3 == null
문서의 [[#s-|]]번 문단}}}{{{#!if 문단3 == null & 앵커3 != null
문서의 [[#|]] 부분}}}}}}{{{#!if 문서명4 != null
 * {{{#!if 설명4 != null
: }}}[[]] {{{#!if 문단4 != null & 앵커4 == null
문서의 [[#s-|]]번 문단}}}{{{#!if 문단4 == null & 앵커4 != null
문서의 [[#|]] 부분}}}}}}{{{#!if 문서명5 != null
 * {{{#!if 설명5 != null
: }}}[[]] {{{#!if 문단5 != null & 앵커5 == null
문서의 [[#s-|]]번 문단}}}{{{#!if 문단5 == null & 앵커5 != null
문서의 [[#|]] 부분}}}}}}{{{#!if 문서명6 != null
 * {{{#!if 설명6 != null
: }}}[[]] {{{#!if 문단6 != null & 앵커6 == null
문서의 [[#s-|]]번 문단}}}{{{#!if 문단6 == null & 앵커6 != null
문서의 [[#|]] 부분}}}}}}{{{#!if 문서명7 != null
 * {{{#!if 설명7 != null
: }}}[[]] {{{#!if 문단7 != null & 앵커7 == null
문서의 [[#s-|]]번 문단}}}{{{#!if 문단7 == null & 앵커7 != null
문서의 [[#|]] 부분}}}}}}{{{#!if 문서명8 != null
 * {{{#!if 설명8 != null
: }}}[[]] {{{#!if 문단8 != null & 앵커8 == null
문서의 [[#s-|]]번 문단}}}{{{#!if 문단8 == null & 앵커8 != null
문서의 [[#|]] 부분}}}}}}{{{#!if 문서명9 != null
 * {{{#!if 설명9 != null
: }}}[[]] {{{#!if 문단9 != null & 앵커9 == null
문서의 [[#s-|]]번 문단}}}{{{#!if 문단9 == null & 앵커9 != null
문서의 [[#|]] 부분}}}}}}{{{#!if 문서명10 != null
 * {{{#!if 설명10 != null
: }}}[[]] {{{#!if 문단10 != null & 앵커10 == null
문서의 [[#s-|]]번 문단}}}{{{#!if 문단10 == null & 앵커10 != null
문서의 [[#|]] 부분}}}}}}

이 문서는 토막글입니다.

토막글 규정을 유의하시기 바랍니다.


파일:ghcli.png
개발 GitHub
출시 2020년 9월 17일#
안정 버전 v2.71.2 (2025년 4월 25일)#
언어 Go(프로그래밍 언어)
플랫폼 Linux, macOS, Windows
(i386, AMD64, ARM64, ARMHF)
라이선스 MIT 허가서
링크 # 파일:GitHub 아이콘.svg파일:GitHub 아이콘 화이트.svg
1. 개요2. 설치3. 명령어4. 특징5. 확장6. 기타7. 관련 문서

1. 개요

Take GitHub to the command line

GitHub API를 이용하여 GitHub의 다양한 기능을 터미널 환경에서 접근할 수 있도록 하는 공식 명령줄 인터페이스.

2. 설치

빌드된 바이너리가 공식 저장소 릴리즈 페이지에 올라오며, Linux, Windows, macOS를 지원한다. BSD 계열은 공식 지원은 없지만 ports에서 쉽게 찾을 수 있다.

Nix에서는 home-manager 모듈로 올라와 있다. extension을 일반적인 동적 라이브러리로 링크할 수 없어 programs.gh.extensions에 미리 선언해야 한다.

wingetGitHub.cli로 올라와 있다.

3. 명령어

내부적으로 cobra 프레임워크를 사용하기 때문에## 주 명령어-서브커맨드 형태의 구조를 이루고 있다.
명령어 서브커맨드 비고
코어
auth
browse
codespace
gistGitHub Gist 관련 명령어
clone
create
delete
edit
list작성한 gist 및 ID를 표시한다.
rename
viewgist의 description 및 개별 파일 이름과 내용을 차례로 표시한다. -f 플래그를 주어 하나의 파일만 선택해 출력할 수 있다.
issue
orglist현재 로그인된 계정이 참여하고 있는 모든 organization을 나열한다.
prcreate병합되지 않은 브랜치에서 ahead 변경사항을 대상으로 PR을 작성한다. .github 폴더 하위의 PR 템플릿을 사용하는 경우, vim 등의 에디터에서 body를 수정할 수 있다.
list
status
checkout
checks
close
comment
diff
edit
lock
merge선택한 PR을 머지한다. 웹 UI와 비슷하게 -r로 리베이스를, -s로 squash 머지를 할 수 있다.
ready
reopen
review
unlock
update-branch
view
project
release
repocreateGitHub에 새 저장소를 생성한다. interactive한 프롬프트가 나와 웹 UI의 /new 페이지에서 진행하는 저장소 생성, README 추가, .gitignore 추가, remote 추가, 기존 히스토리 push 등의 과정을 한번에 진행할 수 있다.
list특정 소유자(owner)가 소유하고 있는 모든 저장소를 보여주며, 아무 입력이 없다면 기본적으로 로그인한 사용자의 저장소들을 보여준다.
archive저장소를 아카이브한다. 파괴적 동작인 만큼 프롬프트 기본값이 N인데, 배치로 돌리고 싶으면 -y를 주어야 한다.
autolink
clone주어진 저장소를 로컬로 클론한다. GitHub의 저장소만 클론할 것을 가정하기 때문에 org/repo 형식의 깃허브 단축 경로를 사용할 수도 있으며, 자신이 소유한 저장소라면 소유자 경로를 생략할 수도 있다. 기본적으로 origin 리모트만 생성하는 git clone과 다르게 포크한 저장소를 클론할 경우, 원본 리모트를 upstream 리모트로 자동 추가한다. 이 경우 PR을 보낼 때 웹 UI를 사용하지 않고 로컬에서 바로 보내는 것도 가능하다. 자세한 내용은 gh pr 명령어 참고.
delete
deploy-key
edit
fork주어진 저장소를 포크한다.
gitignore
license
rename
set-default
sync포크가 있는 경우, upstream 리모트의 최신 커밋을 FF로 반영하고 변경된 사항을 origin에 자동으로 푸시한다. 이 경우 일반적으로 웹 UI에서 fork sync 버튼을 누르는 것과 비슷한 동작을 한다. 목표 저장소를 명시하는 경우, remote-to-remote로 싱크가 가능하다.
unarchive아카이브된 저장소를 아카이브 해제한다.
view저장소의 README 파일을 렌더한다. 링크를 브라우저에서 열고 싶을 경우 gh browse -R을 사용해야 한다.
액션
cache
run
workflow
기타
alias
apiREST 엔드포인트 또는 GraphQL API를 사용하려면 api graphql을 사용한다. 다른 HTTP 클라이언트를 사용해도 되지만 저장한 PAT가 없거나 인증 절차가 까다로운 경우, 깃헙 API를 터미널에서 간단히 테스트하거나 아예 API로 자동화하는 셸 스크립트를 짤 때 생각보다 유용하다. 다른 명령어와 같이 -q 플래그를 넣어 파이핑 없이도 jq를 사용할 수 있는데, JSON으로 긴 응답이 반환될 경우 유용하다.
attestation
completion
config
extensionbrowse
create
exec
install주어진 저장소 주소로부터 확장을 설치한다.
list현재 설치된 확장 및 버전을 나열한다.
remove선택한 확장을 삭제한다.
search
upgrade
gpg-key
label
ruleset
search
secret
ssh-key
statusGitHub에서 현재 assign된 이슈 및 PR, 코드 리뷰, 외부 멘션 등등의 알림을 표시한다.
variable

4. 특징

git cli와 다르게 GitHub 서비스 자체의 리소스(이슈, 액션 등) 관리 및 GitHub의 고유 워크플로(PR, 포크 등)와 관련된 작업에 관여한다. 간혹 있는 오해와 다르게 gh는 git의 superset이나 확장이 아니며 둘은 사용되는 용도와 목적이 분리되어 있어, 둘 다 같이 사용할 수 있다. 일반적으로 개발하면서 커밋 및 히스토리 관리, 브랜치 관리는 git cli로, PR 관리 등은 gh cli로 하게 된다.

GitHub API에는 구현되어 있으나 gh 내장 명령어 자체로는 구현되지 않은 기능들이 다수 있다. 이 경우 관련 확장을 설치하여 해결할 수 있다.

5. 확장

*은 공식 확장(cli/ organization 하위)을 말한다.
  • gh-webhook*: 웹훅 관리 확장.
  • dlvhdr/gh-dash: TUI 대시보드 확장. golang에서 자주 쓰이는 charm 엔진을 사용한다.
  • seachicken/gh-poi: 머지된 브랜치 tidy 확장.
  • rnorth/gh-combine-prs: 동시에 열린 상태인 복수 개의 PR을 병합해 하나의 PR로 재병합하는 확장. 기본적으로 내부적으로 임시 브랜치 하나에 나머지 모든 브랜치를 3way-merge하고 이를 가장 최신 새 PR로 새로 여는 방식으로, suqash나 리베이스가 아니다.
  • mislav/gh-cp: scp와 비슷하게 깃헙 리모트에서 로컬로 개별 파일을 복사하는 명령어.
  • jrnxf/gh-eco: TUI 프로필 대시보드.
  • heaths/gh-label: 이슈 라벨 관리 확장.
  • meiji163/gh-notify: GitHub 알림 인박스 확인 TUI.
  • redraw/gh-install: release에 포함된 아티팩트 또는 빌드 결과물을 바로 설치할 수 있게 하는 확장.
  • Link-/gh-token: PAT 또는 레거시 토큰 발급이 아니라, 사전 등록된 GitHub App을 통한 OAuth 인증으로 토큰을 일회성 발급할 수 있는 확장.
  • mislav/gh-contrib: 흔히 잔디라 불리는 기여 빈도 그래프를 터미널에서 보여주는 확장.
  • k1LoW/gh-grep: 클론하지 않은 저장소 파일을 대상으로 grep을 수행하는 확장.
  • matt-bartel/gh-clone-org: 특정 organization에 속한 모든 저장소를 클론하는 스크립트.

6. 기타

7. 관련 문서