Skip to content

Git Integration

Git Transient

Key: G (Vanilla) (majutsu-git-transient)

Open the Git transient. Jujutsu can interact directly with Git remotes.

Key: ? G (Evil) (majutsu-git-transient)

Open the Git transient. Jujutsu can interact directly with Git remotes.

Pushing

Key: p (majutsu-git-push-transient)

Open the Push transient. You can push bookmarks, tags, revisions, or changes.

Transient arguments:

Key: -a

Push all bookmarks and tags.

Key: -t

Push tracked bookmarks and tags only.

Key: -b

Push specific bookmark(s).

Key: -T

Push specific tag(s) or tag patterns.

Key: -c

Push a specific change.

Key: -r

Push specific revision(s).

Key: -o

Pass a Git push option; may be repeated.

Key: -y

Show what would be pushed without pushing (--dry-run).

Key: W

Save stable push options as defaults for this jj repository. Majutsu remembers sync policy such as --remote, --all, --tracked, --deleted, --allow-empty-description, and --allow-private, but does not remember one-off targets like --bookmark, --tag, --change, --revision, --named, --option, or --dry-run.

Runs: jj git push

Fetching

Key: f (majutsu-git-fetch-transient)

Open the Fetch transient to pull changes from a remote.

Transient arguments:

Key: -R

Fetch from a specific remote; may be repeated.

Key: -b

Fetch a specific branch; may be repeated.

Key: -T

Fetch specific tag(s) or tag patterns; may be repeated.

Key: -t

Fetch only tracked bookmarks and tags.

Key: -A

Fetch from all remotes.

Key: W

Save stable fetch options as defaults for this jj repository. Majutsu remembers --remote, --tracked, and --all-remotes, but not one-off --branch or --tag selections.

Runs: jj git fetch

Gerrit Upload

Key: u (majutsu-gerrit-upload-transient)

Open the Gerrit upload transient.

Transient arguments and selection controls:

Key: -r

Upload specific revision(s).

Key: r

Toggle the revision at point into or out of the upload selection. If no revision is selected, Majutsu leaves revision selection to jj gerrit upload, which uploads @ when it has a description and @- otherwise.

Key: -b

Target remote branch (--remote-branch).

Key: -R

Gerrit remote (--remote).

Key: -n

Preview without pushing (--dry-run).

Key: W

Save stable upload options as defaults for this jj repository. Majutsu remembers --remote, --remote-branch, --notify, and --ignore-attention-set, but not revisions, dry-run, metadata, state, or submit-related flags.

The remaining groups expose:

  • Review options include reviewers, CCs, labels, topic, hashtags, and a patch set message.

  • State/notification options include change edit, WIP/ready, private/remove-private, publishing comments, notification policy, and attention-set handling.

  • Advanced options expose submit, skip validation, merged uploads, deadlines, custom keyed values, and trace values.

Runs: jj gerrit upload

Reviewer/CC prompts use Majutsu's native Gerrit REST client and Gerrit's /accounts/ suggestion endpoint. Topic completion uses the same REST client to query open changes and aggregate existing topics. Label and hashtag prompts are free-form minibuffer input.

REST-backed completion is enabled only when Majutsu can determine a reliable Gerrit web/API origin. HTTP(S) remotes work directly. For SSH remotes such as ssh://user@host:29418/project, configure Gerrit's web URL explicitly, for example:

jj config set --repo gerrit.review-url http://host:8080

Majutsu intentionally does not guess a web/API URL from SSH port 29418. This setting is not required for jj gerrit upload itself; upstream jj uses gerrit.review-url only to generate Link: trailers instead of Change-Id: trailers. Majutsu also uses it as a reliable web/API base for native Gerrit completion.

Remotes

Key: r (majutsu-git-remote-transient)

Open the Remote Management transient.

Transient actions:

Key: l (majutsu-git-remote-list)

List remotes.

Key: a (majutsu-git-remote-add-transient)

Add a new Git remote as jj git remote add [OPTIONS] REMOTE URL. Majutsu prompts for a new remote name, rejects names that already exist, prompts for the URL/path positional, and exposes --fetch-tags and --push-url.

Key: d (majutsu-git-remote-remove)

Remove an existing remote. In the remote list buffer, the remote at point is used as the default.

Key: r (majutsu-git-remote-rename)

Rename a remote.

Key: u (majutsu-git-remote-set-url-transient)

Set remote URLs. With no option, Majutsu prompts for the fetch URL/path positional; use --fetch and/or --push to set them explicitly. In the remote list buffer, the remote at point is used as the default.

Clone and Init

Key: c (majutsu-git-clone-transient)

Clone a Git repository into a jj repo. Source may be a URL or path; --branch can be repeated.

Key: i (majutsu-git-init-transient)

Initialize a new Git-backed jj repository.

Export and Import

In a colocated Git-backed workspace, Jujutsu automatically imports from and exports to the underlying Git repository on each command. In other Git-backed layouts, use the commands below to synchronize the repositories explicitly:

Key: e (majutsu-git-export)

Run jj git export.

Key: m (majutsu-git-import)

Run jj git import.

Key: o (majutsu-git-root)

Show the Git directory path (jj git root).