Skip to content

Git command table

Note that all jj commands can be run on any commit (not just the working-copy commit), but that's left out of the table to keep it simple. For example, jj squash -r <revision> will move the diff from that revision into its parent.

Use case Git command Jujutsu command
Create a new repo git init jj git init [--colocate]
Clone an existing repo git clone <source> <destination> [--origin <remote name>] jj git clone <source> <destination> [--remote <remote name>] (there is no support for cloning non-Git repos yet)
Update the local repo with all bookmarks/branches from a remote git fetch [<remote>] jj git fetch [--remote <remote>] (there is no support for fetching into non-Git repos yet)
Update a remote repo with all bookmarks/branches from the local repo git push --all [<remote>] jj git push --all [--remote <remote>] (there is no support for pushing from non-Git repos yet)
Update a remote repo with a single bookmark from the local repo git push <remote> <bookmark name> jj git push --bookmark <bookmark name> [--remote <remote>] (there is no support for pushing from non-Git repos yet)
Add a remote target to the repo git remote add <remote> <url> jj git remote add <remote> <url>
Show summary of current work and repo status git status jj st
Show diff of the current change git diff HEAD jj diff
Show diff of another change git diff <revision>^ <revision> jj diff -r <revision>
Show diff from another change to the current change git diff <revision> jj diff --from <revision>
Show diff from change A to change B git diff A B jj diff --from A --to B
Show all the changes in A..B git diff A...B jj diff -r A..B
Show description and diff of a change git show <revision> jj show <revision>
Add a file to the current change touch filename; git add filename touch filename
Remove a file from the current change git rm filename rm filename
Modify a file in the current change echo stuff >> filename echo stuff >> filename
Finish work on the current change and start a new change git commit -a jj commit
See log of ancestors of the current commit git log --oneline --graph --decorate jj log -r ::@
See log of all reachable commits git log --oneline --graph --decorate --branches jj log -r 'all()' or jj log -r ::
Show log of commits not on the main branch (TODO) jj log
List versioned files in the working copy git ls-files --cached jj file list
Search among files versioned in the repository git grep foo grep foo $(jj file list), or rg --no-require-git foo
Abandon the current change and start a new change git reset --hard (cannot be undone) jj abandon
Make the current change empty git reset --hard (same as abandoning a change since Git has no concept of a "change") jj restore
Abandon the parent of the working copy, but keep its diff in the working copy git reset --soft HEAD~ jj squash --from @-
Discard working copy changes in some files git restore <paths>... or git checkout HEAD -- <paths>... jj restore <paths>...
Edit description (commit message) of the current change Not supported jj describe
Edit description (commit message) of the previous change git commit --amend --only jj describe @-
Temporarily put away the current change git stash jj new @- (the old working-copy commit remains as a sibling commit)
(the old working-copy commit X can be restored with jj edit X)
Start working on a new change based on the <main> bookmark/branch git switch -c topic main or git checkout -b topic main (may need to stash or commit first) jj new main
Merge branch A into the current change git merge A jj new @ A
Move bookmark/branch A onto bookmark/branch B git rebase B A (may need to rebase other descendant branches separately) jj rebase -b A -d B
Move change A and its descendants onto change B git rebase --onto B A^ <some descendant bookmark> (may need to rebase other descendant bookmarks separately) jj rebase -s A -d B
Reorder changes from A-B-C-D to A-C-B-D git rebase -i A jj rebase -r C --before B
Move the diff in the current change into the parent change git commit --amend -a jj squash
Interactively move part of the diff in the current change into the parent change git add -p; git commit --amend jj squash -i
Move the diff in the working copy into an ancestor git commit --fixup=X; git rebase -i --autosquash X^ jj squash --into X
Interactively move part of the diff in an arbitrary change to another arbitrary change Not supported jj squash -i --from X --into Y
Interactively split the changes in the working copy in two git commit -p jj split
Interactively split an arbitrary change in two Not supported (can be emulated with the "edit" action in git rebase -i) jj split -r <revision>
Interactively edit the diff in a given change Not supported (can be emulated with the "edit" action in git rebase -i) jj diffedit -r <revision>
Resolve conflicts and continue interrupted operation echo resolved > filename; git add filename; git rebase/merge/cherry-pick --continue echo resolved > filename; jj squash (operations don't get interrupted, so no need to continue)
Create a copy of a commit on top of another commit git co <destination>; git cherry-pick <source> jj duplicate <source> -d <destination>
Find the root of the working copy (or check if in a repo) git rev-parse --show-toplevel jj workspace root
List bookmarks/branches git branch jj bookmark list or jj b l for short
Create a bookmark/branch git branch <name> <revision> jj bookmark create <name> -r <revision>
Move a bookmark/branch forward git branch -f <name> <revision> jj bookmark move <name> --to <revision> or jj b m <name> --to <revision> for short
Move a bookmark/branch backward or sideways git branch -f <name> <revision> jj bookmark move <name> --to <revision> --allow-backwards
Delete a bookmark/branch git branch --delete <name> jj bookmark delete <name>
See log of operations performed on the repo Not supported jj op log
Undo an earlier operation Not supported jj [op] undo <operation ID> (jj undo is an alias for jj op undo)
Create a commit that cancels out a previous commit git revert <revision> jj backout -r <revision>
Show what revision and author last modified each line of a file git blame <file> jj file annotate <path>