Lazygit: 터미널에서 Git을 게으르게 다루기

Lazygit: 터미널에서 Git을 게으르게 다루기

Git은 정말 강력한 도구이지만 명령어가 너무 많고 옵션도 복잡해서 막상 터미널에서 쓰려면 머리가 아플 때가 있습니다. git log --oneline --graph --all을 외우고 있는 사람이 몇이나 될까요? 😅

그렇다고 GUI 클라이언트를 쓰자니 무겁고, 터미널 작업 흐름이 끊기는 게 싫은 분들도 계실 겁니다. 이런 고민을 단번에 해결해주는 도구가 바로 Lazygit인데요. 터미널 안에서 동작하는 Git TUI(Text User Interface)로, 키보드 몇 번이면 스테이징부터 커밋, 브랜치 관리, 인터랙티브 리베이스까지 처리할 수 있습니다.

이번 글에서는 Lazygit의 설치부터 핵심 기능까지 함께 알아보겠습니다.

Lazygit이란?

Lazygit은 Jesse Duffield가 Go로 만든 오픈소스 Git TUI 클라이언트입니다. 2018년에 처음 공개되어 GitHub에서 55,000개 이상의 스타를 받을 만큼 많은 개발자들에게 사랑받고 있는 도구인데요.

이름에 “lazy”가 들어간 이유가 재밌습니다. Git 명령어를 일일이 타이핑하기 귀찮은 사람들을 위해 만들었다는 건데요. 실제로 써보면 이름값을 톡톡히 합니다. 복잡한 Git 명령어를 몰라도 키 하나로 원하는 작업을 할 수 있거든요.

Lazygit의 가장 큰 장점은 터미널을 벗어나지 않으면서도 시각적으로 Git 상태를 파악할 수 있다는 것입니다. 변경된 파일 목록, diff 내용, 커밋 히스토리, 브랜치 구조를 한 화면에서 모두 볼 수 있어서 전체적인 상황 파악이 훨씬 수월합니다.

설치

Lazygit은 다양한 운영체제에서 설치할 수 있습니다.

macOS에서는 Homebrew를 사용하면 간단합니다.

$ brew install lazygit

Ubuntu/Debian에서는 공식 PPA를 추가해서 설치합니다.

$ sudo add-apt-repository ppa:lazygit-team/release
$ sudo apt-get update
$ sudo apt-get install lazygit

Windows에서는 Scoop이나 Chocolatey를 사용할 수 있습니다.

$ scoop install lazygit

Arch Linux에서는 pacman으로 바로 설치됩니다.

$ sudo pacman -S lazygit

설치가 끝나면 Git 저장소 안에서 lazygit 명령어로 실행합니다.

$ lazygit

짧은 별칭을 등록해두면 더 편리합니다.

~/.bashrc 또는 ~/.zshrc
alias lg="lazygit"

화면 구성

Lazygit을 실행하면 터미널 전체를 차지하는 TUI 화면이 나타납니다. 화면은 크게 좌측의 패널 영역과 우측의 미리보기 영역으로 나뉘는데요.

좌측에는 5개의 패널이 탭처럼 배치되어 있습니다.

  • Status — 현재 브랜치, 업스트림 상태, 최근 커밋 요약
  • Files — 변경된 파일 목록 (스테이징 여부 표시)
  • Branches — 로컬/원격 브랜치, 태그 목록
  • Commits — 현재 브랜치의 커밋 히스토리
  • Stash — stash 목록

숫자 키 1~5로 패널 사이를 이동하거나 좌우 방향키(, )로 이전/다음 패널로 전환할 수 있습니다. 우측 영역에는 선택한 항목의 상세 정보가 표시됩니다. 파일을 선택하면 diff가 보이고, 커밋을 선택하면 해당 커밋의 변경 내용이 보이는 식입니다.

파일 스테이징

Lazygit에서 가장 자주 하는 작업이 파일 스테이징과 커밋일 텐데요. Files 패널에서 변경된 파일 목록을 확인하고 space 키 한 번으로 스테이징할 수 있습니다.

주요 단축키를 정리해보면 이렇습니다.

  • space — 선택한 파일을 스테이지/언스테이지 토글
  • a — 모든 파일을 한꺼번에 스테이지/언스테이지
  • enter — 파일을 열어 변경된 라인(hunk) 단위로 확인
  • space (hunk 보기에서) — 특정 hunk만 선택적으로 스테이지

특히 hunk 단위 스테이징이 정말 유용합니다. git add 명령어에서 git add -p 옵션을 쓰면 비슷한 작업을 할 수 있지만, Lazygit에서는 변경 내용을 눈으로 보면서 직관적으로 골라 담을 수 있어서 훨씬 편합니다.

커밋 만들기

파일을 스테이징한 후 c 키를 누르면 커밋 메시지 입력 창이 뜹니다. 메시지를 작성하고 Enter를 누르면 커밋이 완료됩니다. 정말 간단하죠?

몇 가지 커밋 관련 단축키도 알아두면 좋습니다.

  • c — 새 커밋 생성
  • C (Shift+c) — 에디터에서 커밋 메시지 작성 (긴 메시지를 쓸 때)
  • A (Shift+a) — 마지막 커밋에 현재 스테이징된 변경사항을 추가 (amend)
  • r (Commits 패널) — 커밋 메시지 수정 (reword)

방금 커밋한 내용에 빠뜨린 파일이 있다면 해당 파일을 스테이징하고 A를 누르면 직전 커밋에 슬쩍 끼워 넣을 수 있습니다. git commit에서 --amend 옵션을 쓰는 것과 같은 효과인데 훨씬 빠르죠.

브랜치 관리

Branches 패널로 이동하면 로컬 브랜치와 원격 브랜치를 한눈에 볼 수 있습니다. 브랜치 관련 작업도 키 하나로 처리됩니다.

  • n — 새 브랜치 생성
  • space — 선택한 브랜치로 체크아웃
  • d — 브랜치 삭제
  • M (Shift+m) — 선택한 브랜치를 현재 브랜치로 머지
  • R (Shift+r) — 선택한 브랜치 위로 리베이스

터미널에서 git branchgit switch 명령어를 쓸 때는 브랜치 이름을 정확히 기억하고 타이핑해야 하잖아요. Lazygit에서는 브랜치 목록에서 원하는 걸 골라 키 하나만 누르면 되니까 오타 걱정도 없고 속도도 빠릅니다.

커밋 히스토리 탐색

Commits 패널에서는 커밋 히스토리를 스크롤하면서 각 커밋의 변경 내용을 바로 확인할 수 있습니다. git loggit diff를 동시에 쓰는 것 같은 느낌인데요.

커밋을 선택한 상태에서 유용한 단축키들이 있습니다.

  • enter — 커밋에 포함된 파일 목록 확인
  • r — 커밋 메시지 수정 (reword)
  • d — 커밋 삭제 (drop)
  • s — 이전 커밋과 합치기 (squash)
  • f — 이전 커밋에 합치면서 메시지는 버리기 (fixup)
  • e — 커밋에서 멈추고 수정할 수 있게 하기 (edit)
  • p — 커밋을 pick 상태로 유지 (cherry-pick할 때)

눈치채셨겠지만 이건 사실상 인터랙티브 리베이스를 시각적으로 하는 겁니다. git rebase-i 옵션으로 하는 작업을 Lazygit에서는 커밋을 보면서 직접 조작할 수 있는 거죠. 터미널에서 에디터가 열리고 pick/squash/fixup 같은 키워드를 직접 편집하는 것보다 훨씬 직관적이고 실수할 여지도 줄어듭니다.

Stash 활용

Stash 패널에서는 git stash로 임시 저장해둔 변경사항들을 관리할 수 있습니다.

Files 패널에서 s를 누르면 현재 변경사항을 stash에 저장할 수 있고, Stash 패널에서 저장된 항목을 선택한 뒤 다음 키들을 사용합니다.

  • space — stash 항목을 적용 (apply, stash 유지)
  • g — stash 항목을 적용하고 삭제 (pop)
  • d — stash 항목 삭제

stash에 뭘 저장해뒀는지 내용을 미리 확인한 뒤 적용할 수 있어서 실수로 잘못된 stash를 꺼내는 일을 방지할 수 있습니다.

원격 저장소 연동

Lazygit은 push/pull 같은 원격 저장소 작업도 지원합니다.

  • P (Shift+p) — push
  • p — pull
  • f (Branches 패널) — fetch

push할 때 업스트림이 설정되지 않은 브랜치라면 자동으로 업스트림 설정 여부를 물어보는데요. 터미널에서 git push -u origin feature/my-branch 같은 긴 명령어를 매번 치는 것보다 훨씬 간편합니다.

force push가 필요한 상황에서는 P를 누른 뒤 force push 옵션을 선택할 수 있습니다. 위험한 작업이니만큼 확인 단계를 거치게 되어 있어서 실수로 force push를 날리는 불상사를 막아줍니다.

충돌 해결

머지나 리베이스 중에 충돌이 발생하면 Lazygit이 충돌 파일을 강조해서 보여줍니다. 충돌 파일을 선택하고 enter를 눌러 들어가면 충돌 마커(<<<<<<<, =======, >>>>>>>)가 표시된 부분을 확인할 수 있는데요.

충돌을 해결하는 방법은 두 가지입니다.

외부 에디터에서 직접 충돌을 수정하고 돌아와서 스테이징하는 방법이 있고, Lazygit 내에서 충돌 파일을 열었을 때 표시되는 충돌 섹션에서 방향키와 단축키로 어느 쪽 변경사항을 선택할지 고르는 방법도 있습니다.

충돌을 모두 해결한 뒤에는 파일을 스테이징하고 continue 작업을 진행하면 됩니다. 리베이스 중이라면 m 키를 누르면 나타나는 메뉴에서 리베이스를 계속 진행할 수 있습니다.

실용적인 단축키 모음

지금까지 다룬 단축키 외에도 알아두면 편리한 키들이 있습니다.

  • ? — 현재 패널에서 사용 가능한 단축키 목록 표시
  • / — 목록 검색 (파일, 브랜치, 커밋 등)
  • + / - — 미리보기 패널 크기 조절
  • @ — 명령어 로그 보기 (Lazygit이 실행한 Git 명령어 확인)
  • : — 커스텀 Git 명령어 직접 입력
  • z — 실행 취소 (undo)
  • q — Lazygit 종료

특히 @ 키가 유용합니다. Lazygit이 내부적으로 어떤 Git 명령어를 실행하는지 보여주기 때문에 Git 명령어를 공부하는 데도 도움이 됩니다. “아, 이 작업을 하려면 이 명령어를 쓰면 되는구나” 하고 자연스럽게 배울 수 있죠.

z 키의 실행 취소 기능도 꽤 든든합니다. 실수로 커밋을 삭제했거나 잘못된 브랜치에 머지했을 때 z를 누르면 직전 상태로 되돌릴 수 있거든요. git reset이나 reflog를 직접 다루지 않아도 되니까 심리적 안전망이 생기는 셈입니다.

설정 커스터마이징

Lazygit의 설정 파일은 OS에 따라 다른 경로에 위치합니다.

  • macOS: ~/Library/Application Support/lazygit/config.yml
  • Linux: ~/.config/lazygit/config.yml

설정 파일에서 다양한 옵션을 조정할 수 있는데요. 자주 바꾸는 설정 몇 가지를 소개하겠습니다.

config.yml
gui:
  # 테마 설정
  theme:
    activeBorderColor:
      - green
      - bold
    inactiveBorderColor:
      - white
  # 마우스 사용 여부
  mouseEvents: true
  # 사이드 패널 너비 비율 (0~1)
  sidePanelWidth: 0.3

git:
  # 자동 fetch 간격 (초, 0이면 비활성화)
  autoFetch: 60
  # 커밋 시 사용할 에디터
  overrideGpg: false

# 커스텀 명령어 정의
customCommands: []

customCommands 설정을 활용하면 자신만의 Git 워크플로우에 맞는 단축키를 만들 수 있습니다. 예를 들어 특정 형식의 커밋 메시지를 자동 생성하거나 자주 쓰는 Git 명령어 조합을 하나의 키에 바인딩할 수 있죠.

config.yml
customCommands:
  - key: "<c-p>"
    context: "files"
    command: "git push origin {{.SelectedLocalBranch.Name}}"
    description: "현재 브랜치를 origin에 push"

다른 도구와 비교

터미널 기반 Git 도구를 고르고 있다면 몇 가지 선택지가 있습니다.

먼저 Git 명령어를 직접 사용하는 방법은 가장 기본적이고 유연하지만 명령어와 옵션을 외워야 하는 부담이 있습니다. git log, git diff, git stash 같은 명령어에 익숙하다면 Lazygit 없이도 충분히 작업할 수 있지만, 인터랙티브 리베이스처럼 복잡한 작업에서는 TUI의 도움을 받는 게 생산성 면에서 유리합니다.

tig는 Lazygit보다 먼저 나온 Git TUI인데요. 커밋 히스토리를 탐색하고 diff를 보는 데 특화되어 있습니다. 다만 Lazygit처럼 스테이징이나 커밋, 리베이스 같은 쓰기 작업을 직접 수행하기에는 기능이 제한적입니다.

GitUI는 Lazygit과 비슷한 목적으로 Rust로 만들어진 도구입니다. 속도가 빠르고 UI가 깔끔한 편이지만 Lazygit에 비해 커뮤니티와 플러그인 생태계가 아직 작은 편입니다.

결국 Lazygit은 “터미널에서 벗어나고 싶지 않은데 Git 작업을 좀 더 편하게 하고 싶다”는 요구를 가장 잘 충족시키는 도구라고 할 수 있습니다.

에디터 연동

Lazygit은 VS Code, Neovim 같은 에디터와도 잘 어울립니다.

Neovim 사용자라면 lazygit.nvim 플러그인으로 Neovim 안에서 Lazygit을 플로팅 윈도우로 띄울 수 있는데요. 코드를 편집하다가 Git 작업이 필요하면 단축키 하나로 Lazygit을 열고 작업을 마친 뒤 다시 에디터로 돌아오는 흐름이 정말 자연스럽습니다.

VS Code에서도 터미널 패널에서 Lazygit을 실행할 수 있습니다. 내장 Git 기능보다 더 빠르고 강력한 인터랙티브 리베이스가 필요할 때 특히 유용하죠.

마치며

Lazygit은 Git 명령어를 외우는 데 에너지를 쏟는 대신 실제 코드에 집중할 수 있게 해주는 도구입니다. 터미널 기반이라 SSH로 원격 서버에 접속해서 작업할 때도 쓸 수 있고, 가볍게 돌아가니까 리소스 걱정도 없습니다.

처음에는 단축키를 익히는 데 시간이 좀 걸리지만, ? 키로 언제든 도움말을 볼 수 있어서 금방 적응할 수 있습니다. 한번 손에 익으면 다시는 git add -p를 타이핑하고 싶지 않게 될 거예요.

Lazygit에 대해서 더 자세히 알고 싶으시다면 공식 GitHub 저장소공식 키바인딩 문서를 참고하시면 됩니다.

This work is licensed under CC BY 4.0 CC BY

개발자를 위한 뉴스레터

달레가 정리한 AI 개발 트렌드와 직접 만든 콘텐츠를 전해드립니다.

Discord