2016년에 Tig Manual 번역글을 작성했었다.
새롭게 변화된것이 있는지 보다보니 업그레이드가 좀 많이 있었네…?

Tig Homepage | Tig Manual 원문


2016년 이후 주요 변경사항

9년 동안 Tig에는 많은 변화가 있었다. 주요 변경사항을 정리하면 다음과 같다.

새로운 뷰

  • Reflog 뷰 (L 키) - Git reflog를 탐색할 수 있는 뷰가 2.5.0에서 추가되었다.

새로운 기능

기능 설명
커밋터(Committer) 열 blame, main, reflog, refs 뷰에서 커밋터 정보 표시 지원
Diff 뷰에서 blame/blob 열기 Diff 뷰에서 직접 blame이나 blob 뷰로 이동 가능
3-way 머지 diff 머지 커밋에 대한 3-way diff 지원
정규식(PCRE) 지원 검색에서 PCRE 호환 정규식 사용 가능
워드 디프(word-diff) 단어 단위 diff 토글 기능
Auto/periodic 새로고침 뷰의 자동/주기적 새로고침 모드
히스토리 영구 저장 ~/.tig_history에 Readline 히스토리 저장
마우스 휠 커서 마우스 휠로 커서 이동 옵션
Unicode 17 최신 Unicode 표준 지원
ISO-8601 상대 날짜 ISO-8601 형식의 상대 날짜 표시
확장 키바인딩 F13-F19, Ctrl 조합키 등 추가

개선사항

  • Worktree 및 서브모듈 지원 강화
  • 화면 업데이트 스로틀링으로 로딩 성능 개선
  • Blame 뷰 렌더링 방식 개선
  • 도움말 뷰에서 관련 섹션만 확장 표시

기존 글과의 차이점 요약

항목 2016년 2025년 (2.6.0)
뷰 개수 12개 13개 (Reflog 추가)
Unicode 기본 Unicode 17
히스토리 세션 한정 영구 저장
정규식 기본 PCRE 지원
머지 diff 일반 3-way 지원

1. 호출 규칙 (Calling Conventions)

이 문서는 Tig에 대한 메뉴얼이다. Tig는 Git에 대한 ncurses 기반의 텍스트 모드 인터페이스로 작성되었다. Tig는 Git 저장소의 변화를 확인하고, 추가적으로 다양한 Git 명령에 대한 출력 내용을 확인할 수 있는 pager로 사용할 수 있다. Pager로 사용할 경우, stdin에서 입력을 표시하고 색상을 추가할 수 있다.

저장소 확인용으로 사용할 경우, Tig는 기초적인 Git 명령을 사용하여 요약된 커밋 로그, 로그 메시지에서의 커밋 내용, diffstat, diff와 같은 다양한 뷰를 이용하여 사용자에게 보여준다.

Pager 모드

Stdin 파이프를 사용할 경우, 모든 로그나 diff 옵션은 무시되고 pager 뷰는 stdin으로 들어온 데이터를 로딩하여 확인할 수 있다. Pager 모드는 다양한 Git 명령에 대한 출력값을 색상을 추가하여 확인할 수 있도록 도와준다.

예로 git-show(1) 명령에 대한 출력을 색상을 추가한 버전으로 보고 싶다면:

$ git show | tig

Git 명령어 옵션

명령 줄에서 모든 Git 명령어 옵션은 주어진 명령에 전달되고, 셸에 모두 전달되기 전에 인용 셸을 통과할 것이다.

주의: 메인 뷰에 대한 옵션을 지정하는 경우엔, 메인 뷰에서 사용하는 형식으로 자동 설정되는 --pretty 옵션을 사용할 수 없다.

커밋과 author, 커미터 정보를 모두 보여주는 방법에 대한 예:

$ tig show --pretty=fuller

Git 명령에 대해 지원되는 변경 옵션에 대한 소개는 리버전 사양 섹션을 참조하라. 특정 Git 명령 옵션에 대한 자세한 설명은 해당 명령의 맨 페이지를 참조하라.


2. 뷰어 (The Viewer)

디스플레이는 하나 이상의 뷰와 스크린으로 구성되어 있으며, 맨 마지막 라인은 상태 윈도우로 사용된다. 기본 값은 한 번에 하나의 뷰만을 보여준다. 하지만 메인과 로그 뷰로 나눠서 커밋 diff를 확인할 수 있다.

현재 라인이 커밋 라인일 때, 로그 뷰에서 엔터키를 누르게 되면 다음과 같은 명령이 실행되는 것과 같다:

commit 4d55caff4cc89335192f3e566004b4ceef572521

뷰를 나눠서 볼 수 있는데, 로그 뷰는 윈도우 상단에, diff 뷰는 윈도우 하단에 위치시킬 수 있다. 탭을 눌러 두 뷰 사이를 왔다 갔다 할 수 있다. 로그 뷰만 보려면 l를 누르면 된다.

뷰 (Views)

저장소에서 여러 가지 views를 볼 수 있다. 각 뷰는 확장 명령, git log, git diff, git show로부터 나오는 출력 값에 기반하여 보여준다.

메인 뷰 (Main view)
기본 뷰이며, 리버전의 선택된 목록에서 각 커밋을 요약하여 보여준다. 요약한 내용에서는 author 날짜, author, 로그 메시지 첫 줄을 포함하고 있다. 추가적으로 태그와 같은 저장소 참조 표시도 같이 표시된다.
로그 뷰 (Log view)
전체 로그 메시지와 diffstat에 대한 리버전 로그를 보여주는 다양한 뷰를 제공한다.
Reflog 뷰 (2.5.0에서 추가)
Git reflog를 탐색할 수 있는 뷰이다. L 키로 접근할 수 있다.
Diff 뷰
현재 작업 트리에 대한 diff, 즉, 마지막 커밋 이후 변화분, 로그 메시지, diffstat, diff에 대한 커밋 diff 완료 내용을 나타낸다.
트리 뷰 (Tree view)
디렉토리 목록을 트리로 표현하여 현재 리버전에 대한 하위 디렉토리로 내려가며 확인하거나 올라오며 확인할 수 있으며 파일의 blob에 대해서도 확인이 가능하다.
Blob 뷰
파일 내용이나 파일 이름에 대한 관련 데이터의 “blob”을 보여준다.
Blame 뷰
파일 내용의 주석이나 커밋에 대한 blame을 보여준다.
Refs 뷰
저장소에서 브랜치, 리모트, 태그를 보여준다.
Status 뷰
작업 트리 내의 파일 상태나 staged/unstaged 변화분 확인과 추적되지 않는 파일의 추가를 좀 더 쉽게 보여준다.
Stage 뷰
stage된 변화분, unstage된 파일의 추적분, 추적되지 않는 파일의 내용에 대한 diff를 보여준다.
Stash 뷰
저장소의 Stash 목록을 보여준다.
Grep 뷰
검색 패턴과 동일한 내용으로 모든 라인과 파일 목록을 보여준다.
Pager 뷰
Stdin으로 입력과 내부 프롬프트에서 입력된 Git 명령어로부터 출력 모두를 보여주는 데 사용된다.
도움말 뷰 (Help view)
키 바인딩에 대한 간단한 참조를 보여준다.

브라우징 상태와 사용자 정의 명령어

뷰어는 head와 커밋 ID 모두를 추적하고, 현재 상태를 보여준다. 커밋 ID는 커서 라인에 따라가며 다른 커밋을 선택할 때마다 강조 표시가 변경된다. 커밋 ID가 변경되면, diff 뷰에선 열 때마다 재로드된다. Head ID는 지나온 로그를 보면서 리버전된 것이 나타내는 메인과 로그 뷰를 확인할 때 사용된다.

Tig에서 명령을 사용하거나 제공하는 명령을 구성할 수 있다. 환경 변수의 일부와 외부 명령어를 사용할 수 있다. 사용자 정의 명령의 경우 다음 변수들을 이용하여 현재 브라우징 상태에 대한 참조 인자로 사용할 수 있다.

변수 값 설명
%(head) 현재 보여지는 head ID. 기본값은 HEAD
%(commit) 현재 선택된 커밋 ID
%(blob) 현재 선택된 blob ID
%(branch) 현재 선택된 브랜치 이름
%(remote) 현재 선택된 리모트 이름 (신규)
%(tag) 현재 선택된 태그 이름 (신규)
%(refname) 현재 선택된 참조 이름 (신규)
%(stash) 현재 선택된 stash 이름
%(directory) 현재 트리 뷰에서 보여지는 위치. 루트 디렉토리일 경우 빈칸으로 표시
%(file) 현재 선택된 파일
%(lineno) 현재 선택된 라인 번호. 기본 값은 0
%(text) 현재 라인의 텍스트 (신규)
%(ref) 참조에서 제공되는 blame 또는 정의되지 않았을 경우 HEAD
%(revargs) 명령 라인에서 리버전 인수 값
%(fileargs) 명령 라인에서 파일 인수 값
%(cmdlineargs) 명령 라인에서 다른 옵션 인자 값
%(diffargs) diff-options나 diff 뷰에 대한 TIG_DIFF_OPTS에서 사용되는 옵션
%(blameargs) Blame 뷰에 대한 blame-options에서 사용된 옵션
%(logargs) 로그 뷰에 대한 log-options에서 사용된 옵션
%(mainargs) 메인 뷰에 대한 main-options에서 사용된 옵션
%(prompt) 인자 값에 대한 프롬프트
%(repo:head) 저장소의 현재 HEAD (신규)
%(repo:git-dir) 저장소의 git 디렉토리 경로 (신규)
%(repo:worktree) 저장소의 worktree 경로 (신규)

사용자 정의 명령어 예제들:

  • 마지막 커밋에 대해 amend 적용:
bind generic + !git commit --amend
  • 클립보드에서 커밋 ID 복사 (macOS):
bind generic 9 !@sh -c "echo -n %(commit) | pbcopy"
  • 클립보드에서 커밋 ID 복사 (Linux - xclip):
bind generic 9 !@sh -c "echo -n %(commit) | xclip -selection c"
  • 리뷰 중 현재 커밋에서 사용된 노트 추가/수정:
bind generic T !git notes edit %(commit)
  • Git 대화형으로 파일 내용에 세밀한 staging 추가 입력:
bind generic I !git add -i %(file)
  • 선택된 브랜치의 최상위에서 현재 브랜치로 리베이스:
bind refs 3 !git rebase -i %(branch)

제목 윈도우

각 뷰는 뷰 이름에 대한 제목 윈도우를 가진다. 가능하다면 현재 커밋 ID로도 나타낼 수 있으며, 뷰에서는 다음과 같이 위치된다:

[main] c622eefaa485995320bc743431bae0d497b1d875 - commit 1 of 61 (1%)

기본 값으로 현재 뷰의 제목은 굵은 폰트를 사용하여 강조된다. 긴 로딩이 있는 뷰의 경우(3초 이상), 로딩이 시작된 시간으로부터의 시간이 추가되어 보여진다:

[main] 77d9e40fbcea3238015aea403e06f61542df9a31 - commit 1 of 779 (0%) 5s

3. 환경 변수 (Environment Variables)

Git 인터페이스에 관련된 몇 가지 옵션을 환경 변수를 통해 구성할 수 있다.

구성 파일

시작 시 Tig는 시스템 전체 구성 파일(기본 값 {sysconfigdir}/tigrc)을 읽은 다음 사용자 구성 파일(기본 값 ~/.tigrc)을 읽는다. 이 파일 중 하나의 경로를 다음과 같은 환경 변수를 이용하여 재정의할 수 있다:

TIGRC_USER
사용자 구성 파일 위치
TIGRC_SYSTEM
시스템 전체 구성 파일 위치

히스토리 파일 (신규)

Tig 2.3.0부터 Readline 히스토리가 ~/.tig_history 파일에 영구적으로 저장된다. 이전에는 세션이 종료되면 히스토리가 사라졌지만, 이제는 다음 세션에서도 이전 검색어나 명령어를 사용할 수 있다.

저장소 참조

태그와 브랜치 head가 참조하는 커밋은 []에 둘러싸여 참조 이름으로 표시된다:

2006-03-26 19:42 Petr Baudis         | [cogito-0.17.1] Cogito 0.17.1

브랜치가 보여지는 것을 제한하길 원한다면, 보여질 브랜치의 이름이 master이거나 feature/로 접두어로 시작하는 경우엔 다음과 같이 변수를 설정할 수 있다:

$ TIG_LS_REMOTE="git ls-remote . master feature/*" tig

또는 여러분의 환경에서 영구적으로 변수를 설정하여 사용할 수 있다.

TIG_LS_REMOTE
모든 저장소에 대한 참조를 검색하는 명령을 설정한다. 명령을 사용하게 되면 git-ls-remote(1)과 같은 포맷으로 데이터를 출력할 수 있다. 기본 값은 다음과 같다:
git ls-remote .

Diff 옵션

Diff 뷰에 대해 diff를 어떻게 표시할 것인가에 대한 내용으로 수정이 가능하다. 예를 들어 커밋과 author 날짜를 상대 날짜와 같이 보길 원한다면:

$ TIG_DIFF_OPTS="--relative-date" tig

또는 여러분의 환경에서 영구적으로 변수를 설정하여 사용할 수 있다.


4. 기본 키 바인딩 (Default Keybindings)

기본 키 바인딩에 대해서는 아래와 같다.

뷰 전환

동작
m 메인 뷰로 전환
d diff 뷰로 전환
l 로그 뷰로 전환
L reflog 뷰로 전환 (신규)
p pager 뷰로 전환
t 디렉토리 트리 뷰로 전환
f 파일 blob 뷰로 전환
g grep 뷰로 전환
b blame 뷰로 전환
r refs 뷰로 전환
y stash 뷰로 전환
h 도움말 뷰로 전환
s status 뷰로 전환
c stage 뷰로 전환

뷰 조작

동작
q 뷰를 닫는다. 여러 뷰가 열려 있다면, 뷰 스택 안에서 이전 뷰로 되돌아가게 된다. 마지막 뷰라면, Tig에서 나오게 됨.
Q 모든 뷰를 닫고 Tig 종료
Enter 이 키는 현재 보고 있는 뷰에서 “상황에 맞게(context sensitive)” 동작한다. 커밋 줄에서의 로그 뷰나 메인 뷰일 땐 뷰를 분할하여 커밋 diff를 보여준다. diff 뷰에서는 간단하게 한 줄을 내리는 데 사용된다.
Tab 다음 뷰로 전환
R 현재 뷰를 리로드하거나 새로고침
O 현재 뷰를 화면에 꽉 차도록
Up “상황에 맞게(context sensitive)” 작동하며, 한 줄 위로 이동한다. 그러나 메인 뷰에서(split이나 전체 화면에서) diff 뷰를 열 경우, 메인 뷰에서는 이전 커밋으로 커서를 변경하고 해당 diff 뷰를 보여주게 된다.
Down Up과 동일하며 단지 아래로 내려간다.
, 상위로 이동한다. 트리 뷰에서는 상위 디렉토리로 이동하게 된다. blame 뷰에서는 상위 커밋에 대한 blame가 표시된다. 머지의 경우, 상위가 쿼리된다.

뷰 지정 동작

동작
u 파일 상태를 업데이트한다. Status 뷰에서는 다음 커밋에 대해 추가하지 않은 파일이나 stage 변경 파일에 대해서 추가할 수 있다.(git-add <filename>과 동일한 작업이다.) Stage 뷰에서는 diff 청크 라인에서는 다음 커밋에 대한 청크만 stage 한다. diff에 표시되는 모든 변화가 diff 청크 라인에서 stage 되지는 않는다.
M git-mergetool(1)을 실행하여 머지되지 않은 파일을 해결한다. 주의, 원하는 머지 도구를 사용하기 위해 초기 구성이 필요할 수 있다. 올바르게 작동하는지 확인하라. git-mergetool(1)의 맨페이지를 확인하라.
! Unstage된 변경을 파일에서 체크아웃한다. 마지막 커밋한 콘텐츠가 포함된 파일을 재설정한다.
1 Stage 싱글 diff 라인
@ Stage 뷰에서 다음 청크로 이동
] diff 콘텍스트 확장
[ diff 콘텍스트 축소

커서 네비게이션

동작
k 커서 한 라인 위로 이동
j 커서 한 라인 아래로 이동
PgUp, -, a 커서 한 페이지 위로 이동
PgDown, Space 커서 한 페이지 아래로 이동
End 마지막 라인으로 점프
Home 첫 라인으로 점프

스크롤

동작
Insert 뷰 한 라인 위로 스크롤
Delete 뷰 한 라인 아래로 스크롤
ScrollBack 뷰 한 페이지 위로 스크롤
ScrollFwd 뷰 한 페이지 아래로 스크롤
Left 뷰 한 컬럼 왼쪽으로 스크롤
Right 뷰 한 컬럼 오른쪽으로 스크롤
\| 뷰 첫 칼럼으로 스크롤

검색

동작
/ 뷰에서 검색. 열려진 프롬프트에서 정규식을 사용해서 찾을 수 있음.
? 뷰에서 뒤에서부터 검색. 이것도 정규식 사용 가능.
n 현재 검색 정규식과 동일한 다음 검색
N 현재 검색 정규식과 동일한 이전 검색

기타

동작
Q 나가기
<C-L> 스크린 새로고침
z 모든 백그라운드 로딩 정지. 리버전 로그의 제한 없이 긴 히스토리를 가진 저장소에서 Tig를 사용할 때 필요할 수 있다.
v 버전 확인
o 옵션 메뉴 열기
# 라인 번호 on/off
D 날짜 표시 on/off/short/relative/local
A Author 표기 on/off/abbreviated/email/email 사용자 이름
G 리버전 그래프 시각화 on/off
~ 라인 그래프 모드 on/off
F 참조 표시 on/off (태그, 브랜치 이름)
W diff에 대한 공백 무시 on/off
X 커밋 ID 표시 on/off
% 모든 diff 대신에 현재 선택한 파일에 대한 diff를 참조하기 위한 파일 필터링 on/off
$ 커밋 제목 넘어감에 대한 강조 표시 on/off
| 워드 디프 on/off (신규)
: 프롬프트 열기. 특정 명령어를 실행할 수 있도록 허용
e 에디터에서 파일 열기

프롬프트

동작
:<number> 특정 라인 번호로 점프. 예 :80
:<sha> 특정 커밋으로 점프. 예 :2f12bcc
:<x> 일치하는 키 바인딩 실행. 예 :q
:!<command> Pager 내에서 시스템 명령어 실행. 예 :!git log -p
:<action> Tig 명령 실행. 예 :edit
:save-display <file> <file>에서 현재 화면 저장
:save-options <file> <file>에서 현재 옵션 저장
:script <file> <file>로부터 명령어 실행
:exec <flags><args...> <flags>에 정의된 확장 사용자 정의 명령 옵션과 <args> 사용하여 명령 실행

외부 명령어

사용자에 따라 외부 명령어가 더 필요한 경우, 쉽게 스크립트나 프로그램을 사용할 수 있는 방법을 제공한다. 현재 커밋 ID로 키를 연결하고 현재 보여지는 상태에서 정보를 사용할 수 있다. Tig에서 기본 등록되어 있는 확장 명령어:

Keymap 동작
main C git cherry-pick %(commit)
status C git commit
generic G git gc

5. 리버전 사양 (Revision Specification)

이 세션에서는 리버전을 표시하거나 볼 수 있는 내용을 제한할 수 있도록 설정하는 방법에 대해서 설명한다. Tig에서는 구문 분석을 하지 않는다. 리버전 옵션에 대한 자세한 설명은 Git 메뉴얼 페이지에서 확인하라. 연관된 맨페이지는 git-log(1)을 기준으로 git-diff(1)git-rev-list(1)이다.

설정 가능한 옵션을 사용하여 Git과 상호 작용을 이 세션에서 설명한다. 예를 들어 diff 옵션에 대한 세션에서 설명된 환경 변수를 사용하여 구성할 수 있다.

경로명 제한

특정 파일 (또는 여러 파일) 변경에 대해서만 확인하고 싶다면 다음과 같이 목록으로 나타낸다:

$ tig Makefile README

Tig의 하위 명령 또는 태그 이름과 같은 저장소 참조에서 발생할 수 있는 모호성을 방지하기 위해 Git 옵션의 경우 --를 사용하여 구분해야 된다. status라는 이름을 가진 파일이 있다면, status 하위 명령과 충돌을 일으킬 거니 다음과 같이 사용해야 한다:

$ tig -- status

날짜나 숫자 제한

Git과의 상호작용 속도를 올리기 위해 로그와 메인 뷰에서 보여지는 커밋의 수를 제한할 수 있다. 예를 들어, 날짜로 제한을 걸 경우엔 --since=1.month, 커밋 수로 제한을 걸 경우엔 -n400와 같이 사용한다.

만약 두 날짜 사이에 발생한 변경분에 대해서 확인하고 싶다면:

$ tig --after="May 5th" --before="2006-05-16 15:44"

주의, 공간을 포함하는 날짜를 사용하지 않는다면 .를 이용하여 나타낼 수 있다. 예, --after=May.5th

커밋 범위 제한

대안으로 “tag-1.0tag-2.0 사이의 모든 커밋”과 같은 특정 범위로 제한할 수 있다. 예를 들면:

$ tig tag-1.0..tag-2.0

원격 브랜치로 푸시되지 않은 커밋의 검색 제한은 다음과 같은 방법으로 가능하다. origin을 업스트림 원격 브랜치로 가정하고 사용한다면:

$ tig origin..HEAD

원격 브랜치에서 푸시된 내용들을 나열한다. 선택적으로 HEAD는 생략될 수 있다.

도달 가능성 제한

Git 인터프리터에서는 tag-1.0...tag-2.0을 사용하는 경우, “tag-1.0을 제외하고 tag-2.0까지의 모든 커밋”으로 지정할 수 없다. 도달 가능한 참조는 물음의 브랜치의 원형 (또는 히스토리의 일부분)의 커밋 또는 태그된 리버전일 수 있다.

이 방법으로 다음 커밋을 지정하려는 경우:

$ tig tag-2.0 ^tag-1.0

부정 연산자로 ^를 생각할 수 있다. 이 대체 문법을 사용하면 위의 여러 브랜치의 cut off를 지정하여 커밋 브랜치를 없애버릴 수 있다.

리버전 사양 조합

리버전 옵션은 다음과 같이 연결하여 사용할 수 있다. “Documentation/ 디렉토리에 있는 파일의 변경 사항들을 마지막 달 20개 커밋까지 보여다오.”를 다음과 같이 나타낼 수 있다:

$ tig --since=1.month -n20 -- Documentation/

모든 저장소 참조 검사

일부 경우엔 저장소에 대한 모든 참조를 걸쳐서 변화를 조회하는 것이 편할 수 있다. 다음 예제는 “이 저장소의 개발 라인에서 지난주 내 특정 파일이 변경되었는지”에 대해 묻는 것이다. 다음 명령으로 가능하다:

$ tig --all --since=1.week -- Makefile

6. 추가 정보

Tig 홈페이지메인 Git 저장소를 방문하여 새로운 릴리스 내용, 버그 리포트 내용, 기능 요청에 대한 정보를 얻어가시길 바란다.


7. 저작권

Copyright (c) 2006-2025 Jonas Fonseca jonas.fonseca@gmail.com

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.


8. 관련 문서

맨 페이지: