Tig
Tig는 Git을 위한 ncurses 기반 텍스트 모드 인터페이스입니다. 주로 Git 저장소 브라우저로 사용됩니다.
사용 시기
- 터미널 기반 Git 히스토리 탐색: 헤드리스 서버 환경에서 커밋 그래프, 브랜치, 태그를 빠르게 탐색할 때
- 대화형 스테이징 및 청크 커밋: 터미널을 벗어나지 않고 diff 검토, 헹크 스테이징, 스테이징되지 않은 라인 되돌리기
- Blame 및 코드 주석: 코드 라인별 커밋 작성자, 타임스탬프, 커밋 로그 검사 (
tig blame) - 경량 Git 감사: SSH 연결을 통해 대규모 엔터프라이즈 Git 저장소를 GUI 지연 없이 감사
빠른 시작
1. 자주 사용하는 명령어
# 메인 브랜치 커밋 그래프 열기
tig
# 특정 파일의 히스토리 보기
tig path/to/file.ts
# 커밋되지 않은 변경 사항의 diff 보기 (상태 보기)
tig status
# 대화형 blame 보기
tig blame path/to/file.ts
2. 필수 탐색 키
m: 메인(커밋 그래프) 보기로 전환s: 상태(스테이징) 보기로 전환d: 선택한 커밋의 Diff 보기b: Blame 보기u: 선택한 파일 또는 diff 헹크 스테이징/언스테이징q: 활성 보기 닫기 / 종료
핵심 개념
프로덕션 Tig 설정 (~/.tigrc)
색상, 키바인딩, 보기 레이아웃 사용자 정의:
# ~/.tigrc
# 일반 설정
set line-graphics = utf-8
set tab-size = 2
set main-view = id date:relative author:email-user commit-title:graph=yes,refs=yes
set diff-view = line-number:yes,interval=5
set status-view = line-number:yes
# 키바인딩: Vim 네비게이션
bind generic j move-down
bind generic k move-up
bind generic g move-first-line
bind generic G move-last-line
bind generic <Ctrl-f> page-down
bind generic <Ctrl-b> page-up
# 빠른 작업
bind main <Enter> view-diff
bind status u stage-update
bind status s stage-update
bind status c !git commit -v
대화형 스테이지 보기 및 헹크 스테이징
상태 보기에서 변경 사항을 검토하고 스테이징하는 방법:
# Tig를 직접 상태 모드로 열기
tig status
# 상태 보기 키:
# - 'u'를 누르면 파일 또는 헹크를 스테이징/언스테이징합니다.
# - 'Enter'를 누르면 선택한 파일의 diff 보기가 열립니다.
# - '1'을 누르면 개별 라인을 스테이징합니다.
# - 'c'를 누르면 편집기가 열리고 커밋을 생성합니다.
tig blame으로 회귀 조사
저장소 히스토리를 통해 라인 수정 사항 추적:
# 특정 파일에 대한 대화형 blame 뷰어 실행
tig blame src/auth/jwt_validator.go
# Blame 보기 탐색:
# - 아무 라인에서 'Enter'를 누르면 해당 라인을 도입한 전체 커밋 diff를 봅니다.
# - ','를 누르면 해당 변경 이전의 부모 커밋을 blame합니다.
# - 'q'를 누르면 이전 보기로 돌아갑니다.
일반 패턴
#커스텀 Tig 키바인딩 (~/.tigrc)
문제: 빠른 터미널 스테이징, 리베이스, 브랜치 체크아웃.
해결책: ~/.tigrc에 커스텀 단축키를 정의합니다.
# ~/.tigrc
# 'F'를 origin에서 가져오기(fetch)에 바인딩
bind generic F !git fetch origin
# 상태 보기에서 'C'를 빠른 커밋에 바인딩
bind status C !git commit -v
# 'P'를 현재 브랜치 푸시(push)에 바인딩
bind generic P !git push origin HEAD
모범 사례 (2026)
- 할 것:
~/.tigrc에서main-view를commit-title:graph=yes,refs=yes로 설정하여 명확한 브랜치 계층을 표시하세요. - 할 것:
tig blame을 사용하여 문제가 되는 코드 라인을 도입한 PR이나 커밋을 빠르게 찾으세요. - 할 것:
tig status를 사용하여 개별 라인 헹크(1)를 검토하고 스테이징하여 깔끔하고 세분화된 Git 커밋을 만드세요. - 할 것: Vim 키바인딩에 익숙하다면
.tigrc에서 기본 탐색 키를j/k로 다시 매핑하세요. - 하지 말 것: Tig에서 해결되지 않은 병합 충돌을 열어 두지 마세요. 충돌 상태를 보려면 Tig를 사용하고 편집기에서 해결하세요.
- 하지 말 것: 브랜치나 경로 제한 없이 수 기가바이트 규모의 저장소에서 전체 히스토리 Tig 보기를 실행하지 마세요.
- 하지 말 것: 세션을 종료하지 않고 보기 계층을 올라가려면
q를 누르는 것을 잊지 마세요.
문제 해결
| 오류/증상 | 원인 | 해결 방법 |
|---|---|---|
| 터미널에서 색상이 잘 안 보임 | 터미널 테마 대비가 기본 Tig 팔레트와 충돌함 | ~/.tigrc에서 사용자 정의 색상 설정 (예: color diff-stat green default). |
| Tig가 잘못된 Git 저장소 루트에서 열림 | 현재 작업 디렉토리가 서브모듈 내부이거나 저장소 외부에 있음 | tig를 호출하기 전에 git rev-parse --show-toplevel을 확인하세요. |
cannot open file: ... (blame 보기에서) | 파일이 작업 트리에서 이름이 바뀌거나 삭제됨 | 커밋 참조를 명시적으로 전달: tig blame HEAD~2 -- path/to/file. |