stacking branch 전략을 위한 여정.
jj
info
revsets
revision 집합을 선택하기 위한 표현 방식
::: 저장소의 모든 숨겨지지 않은 커밋
=: all(), root()::visible_heads()
..: root를 제외한 모든 숨겨지지 않은 commit
=: ~root(), root()..visible_heads()
@ : 현재 작업 사본 커밋 최상위
@- , @--, …: - 가 붙을때마다 최상위에서 이 전 커밋을 의미한다.
patterns
functions
description(pattern)
graph
◆ : 보호된 커밋 - 변경 불가능
○: 변경 가능
actions
git
init
jj git init <PROJECT_PATH>
remote
jj git remote add <REMOTE> <REMOTE_URL>
ex: jj git remote add origin git@github.com:...
jj git remote list
push
jj git push
jj git push --bookmark <BOOKMARK>
--bookmark <BOOKMAR> 이 없는 경우 실제로 푸시할 북마크를 자동으로 선택함.
bookmark를 branch로 원격에 push
ex: jj git push --bookmark main
jj git push --change <REVISION>
변경사항에 대한 임시 북마크(브랜치)를 생성해서 push
ex: jj git push --change @-
fetch
jj git fetch
abandon
커밋 제거
jj abandon <RECISION>
new
jj new
빈 커밋 생성. 설명도 없음
jj new main
main으로 빈 리비전 생성 - git의 checkout과 비슷한 효과
jj new <IDENTITY> <IDENTITY>
두개의 부모를 가진 병합 커밋 생성
ex: jj new main@origin @-
새로운 커밋을 만드는데 main@origin, @- 를 병합한 커밋을 생성
ex: `jj new ‘description(substring:“Document hello.py in README.md”)’
위에처럼 특정 commit 설명에 일치하는 revision 위에 생성하게 할 수도 있음
metaedit
jj metaedit --update-author
restore
사본 커밋에서 변경된 파일 복원
jj restore
전체 복원
jj restore --from <REVISON> <FILE>
이렇게 특정 커밋의 파일로 복원할 수 있음
log
jj log
:= jj
jj log --revisions 'all()'
:= jj log -r ::
show
jj show
현재 상위 커밋 정보 확인
jj show <BOOKMARK>
jj show <REVISION>
jj show <BOOKMARK>@<REMOTE>
ex: jj show main@origin
rebase
jj rebase --onto <BOOKMARK>@<REMOTE>
revisions를 지정 안할시 기본 -b @ 가 --onto 앞에 생략된 형태라고 보면 됨
--onto (-o) : 이전 베이스 위에 쌓음
jj rebase -s A --onto B --onto C
위에 처럼 여러 —onto를 함으로써 merge revision을 만들 수 있다.
commit
jj에서는 기본적으로 모든 것을 commit한다.
git으로 치면 모든 것이 staged, unstaged가 없음
jj commit
jj commit -m <MESSAGE> <?FILE> ex: jj commit -m “fix: readme.md”ex:jj commit -m “chore: update package” package.json`
bookmark
북마크는 커밋에 붙는 라벨이다. 책갈피를 생각하면 된다.
굳이 branch와 이름이 다르게 지은 이유는 git처럼 브랜치를 생성 후 커밋하는 것이 아닌 일단 커밋하고 나중에 bookmark를 붙히는 식의 workflow이기 때문이다.
branch는 모든 상위 커밋을 포함하는 커밋 집합을 이야기 한다.
bookmark는 단일 커밋에 붙은 라벨이다.
jj bookmark create <BOOKMARK> --revision <REVISION>
ex: jj bookmark create main --revision q - id 약자도 가능
jj bookmark track <BOOKMARK>@<REMOTE>
ex: jj bookmark track main@origin
jj bookmark move <BOOKMARK> --to <REVISION>
jj bookmark move <BOOKMARK> --to @-
@- 는 작업 사본 commit의 부모를 참조하는 키워드다. 해당 commit의 id를 입력해도 동일하다.
else
jj undo
jj redo
jj file untrack <FILE_NAME>
커밋에 기록되고 .gitignore에 제외했지만 이미 파일이 등록되어 있는 경우 해당 파일 추적 해제
config
jj config edit --repo
repo: .jj/repo/config.toml
workspace: .jj/workspace-config.toml
example
#:schema https://docs.jj-vcs.dev/latest/config-schema.json
[user]
name = "hj"
email = "hjs14232@gmail.com"
[ui]
editor = "hx"