简介
jujutsu 是一款与 git 互补的工具
安装
环境为 WSL2-Ubuntu24.04
参考 url: https://github.com/jj-vcs/jj/blob/main/docs/install-and-setup.md
第一节:Download pre-built binaries for a release
也就是下载预编译包来安装,命令如下:
bash
# 写博客时 latest 版本为 0.46.0
JJ_VERSION=0.46.0
mkdir -p ~/.local/bin
curl -fL \
"https://github.com/jj-vcs/jj/releases/download/v${JJ_VERSION}/jj-v${JJ_VERSION}-x86_64-unknown-linux-musl.tar.gz" \
-o "/tmp/jj-v${JJ_VERSION}.tar.gz"
mkdir -p /tmp/jj
tar -xzf "/tmp/jj-v${JJ_VERSION}.tar.gz" -C /tmp/jj
install -m 755 /tmp/jj/jj ~/.local/bin/jj
jj --version
典型用法
clone
bash
jj git [--colocate] clone <仓库链接>
--colocate: 让 jj 和 git 处于共存状态,默认带,可省略
查看日志:
bash
cd <仓库>
jj log
也可以就用 jj,默认功能就是 jj log
修改 stage 区域的 commit message:
bash
jj describe
新建新的 stage:
bash
jj new
删除某个 stage:
bash
jj abandon <change-id> # 不带 change-id 的话默认删除 @ 指向的当前 stage
一次性使用 describe + new
bash
jj commit
压缩提交:
bash
jj squash --from <change-id-1> --to <change-id-2>
撤销上一次操作:
bash
jj undo
新建分支:
bash
jj describe
# 描述新分支的作用
jj new <change-id> # 在 change-id 的基础上创建新副本
切换分支:
bash
jj edit <change-id>
rebase:
bash
jj rebase -r <change-id-1> -d <change-id-2>
把 change-id-1 rebase 到 change-id-2
注意:与 git 不同,jj 在遇到 合并/rebase 冲突时并不会要求你立刻解决冲突,而是会生成一个包含冲突的 change/commit,你可以在这个 change/commit 继续开发其他功能,直到你想要解决冲突为止
一个很好的 jj 冲突可视化 vscode插件:VisualJJ
推送本地修改到远程分支:
bash
jj new <change-id> # 移动 git HEAD
jj bookmark set main # 把当前 commit 设置为 main
jj bookmark set -r '@-' main --allow-backwards # 把 main 往回退一步
jj git push # 推送到远程分支
jj 提交 stage 里的一部分内容,并查看:
bash
jj split
# 会产生一个 UI,让你选择提交哪个文件、以及该文件内部修改的哪一部分
jj status # 查看你刚刚决定提交的文件和部分
jj commit # 正式提交
创建 PR:
bash
# 假设你当前的 git_head 已经超越 main 几个 commits
# 1.设置 bookmark
jj bookmark set -r '@-' feature-xxx
jj git push --allow-new
jjtui 的内容略