(done) jujutsu 版本控制工具 (jj)

简介

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 的内容略