콘텐츠로 이동

Jujutsu (jj) - Git 호환 버전 관리 치트시트

Jujutsu (jj) - Git 호환 버전 관리 치트시트

Jujutsu (jj)는 Git 호환되는 현대적 버전 관리 시스템입니다. Git 저장소를 백엔드로 사용하므로 기존 저장소에서 채택할 수 있고 Git을 사용하는 팀원과 상호 운용할 수 있습니다. 모델은 다르며 많은 사람에게 더 간단합니다: 작업 복사본은 그 자체로 커밋입니다 (별도의 스테이징 영역 없음), 충돌은 첫 번째 클래스 객체로서 나중에 커밋하고 해결할 수 있으며, 모든 작업은 실행 취소할 수 있는 작업 로그에 기록됩니다. 기본적으로 Git 의미의 브랜치가 없으며, 안정적인 변경 ID로 식별되는 변경 사항으로 작업합니다.

설치

플랫폼명령어
Cargocargo install --locked jj-cli
macOS (Homebrew)brew install jj
Arch Linuxsudo pacman -S jujutsu
Nixnix profile install nixpkgs#jujutsu
Windows (Scoop)scoop install jujutsu
확인jj --version

설정

명령어설명
jj config set --user user.name "Your Name"이름 설정
jj config set --user user.email "you@example.com"이메일 설정
jj git init --colocate기존 Git 저장소에서 jj 초기화 (.git 유지)
jj git clone <url>jj로 Git 저장소 클론
jj git init새로운 jj 저장소 생성 (네이티브 백엔드)

핵심 개념

용어의미
Change안정적인 변경 ID를 가진 논리적 변경 (재작성 시에도 유지)
Commit스냅샷, 작업 복사본은 항상 커밋입니다 (@)
@현재 작업 복사본 커밋
Revset커밋을 선택하기 위한 쿼리 언어
Operation log저장소 작업의 이력, 각각 취소 가능
Bookmark명명된 포인터 (푸시 시 Git 브랜치로 매핑)

일상적인 워크플로우

명령어설명
jj status작업 복사본 변경 사항 표시
jj log커밋 그래프 표시
jj diff작업 복사본 커밋 비교
jj describe -m "msg"현재 커밋의 메시지 설정/교체
jj new현재 커밋 위에 새 변경 시작
jj new <rev>특정 커밋 위에 새 변경 시작
jj edit <rev>기존 커밋을 작업 복사본으로 변경
jj commit -m "msg"@를 설명하고 새 변경 시작 (Git 스타일)

이력 이동 및 편집

명령어설명
jj squash@의 변경 사항을 부모에 이동
jj squash -i상호 대화형으로 squash할 항목 선택
jj split현재 커밋을 두 개로 분할
jj rebase -d <dest>변경 사항을 대상으로 rebase
jj abandon <rev>커밋 드롭
jj duplicate <rev>다른 곳에 커밋 복사

킬러 기능: 실행 취소

명령어설명
jj op log수행한 모든 작업 나열
jj undo마지막 작업 취소
jj op restore <id>저장소를 이전 작업 상태로 복원

모든 명령어가 작업이므로 rebase와 abandon을 포함한 거의 모든 것을 취소할 수 있습니다.

북마크 및 Git 상호 운용성

명령어설명
jj bookmark create main -r @북마크 생성 (≈ Git 브랜치)
jj bookmark set main -r @북마크를 커밋으로 이동
jj git fetchGit 원격에서 페치
jj git pushGit 원격에 북마크 푸시
jj git push -c @현재 변경 사항에서 원격 브랜치 생성

Revsets (커밋 선택)

Revset선택 대상
@작업 복사본 커밋
@-작업 복사본의 부모
main북마크가 가리키는 커밋
mine()당신의 커밋
ancestors(@)@의 모든 선조
jj log -r "description(glob:'fix*')"메시지가 일치하는 커밋

일반적인 워크플로우

# 기존 Git 저장소에서 jj 채택, Git 원격과 함께 계속 작업
jj git init --colocate
jj log

# 스테이징 없이 변경 사항 만들기 - 파일을 편집한 후 설명 추가
# (파일은 자동으로 @로 스냅샷됨)
jj describe -m "Add feature"
jj new                       # 다음 변경 시작

# 아, 마지막 작업 취소 (rebase도 포함)
jj undo

# 현재 변경 사항을 검토용 브랜치로 푸시
jj bookmark create feature -r @
jj git push -c @

jj vs Git

측면Jujutsu (jj)Git
스테이징 영역없음 (작업 복사본이 커밋)Index/staging
충돌첫 번째 클래스, 커밋 가능진행하기 전에 해결해야 함
취소작업 로그를 통한 보편적Reflog (부분적)
브랜치북마크 (선택적)브랜치 (중심)
백엔드Git 호환Git

리소스