This page maps Git commands to their Veyra equivalents and marks what is implemented today.
Rule: Git's spelling is canonical. Moving a script to Veyra should be close to s/git/veyra/.
New, clearer names exist only as aliases (see DESIGN.md Β§2, A5).
Legend: β implemented and tested Β· π‘ partial (see note) Β· π planned (phase in ROADMAP.md)
Veyra and Git share the same repository. Anything marked π can be done with git today, and
Veyra records it as an external operation, so veyra undo still works afterwards.
A partial clone configured exactly like Git's (promisor remote, .promisor packs), so both tools fetch missing objects on demand. Veyra fetches them in batches before checkouts and merges.
git backfill
veyra backfill
β
Downloads every object a partial clone left on the remote
git status
veyra status [--short] [--porcelain] [--json]
β
--short and --porcelain (v1) output match git status --porcelain. Paths are shown relative to the repository root.
Only the scope's directories are checked out (cone-mode sparse). Scopes are declared in .veyra/scopes.toml. Add --filter=blob:none to download only the scope's files.
git sparse-checkout set/add/list/disable
veyra sparse set [dirs] [--scope s] [--no-cone] / add / list / disable
β
Same .git/info/sparse-checkout and skip-worktree bits as Git (git sparse-checkout list agrees). --no-cone takes Git's gitignore-style patterns (last match wins). Refuses to hide files with local changes.
core.hooksPath respected. Hooks run through Git for Windows' sh on Windows. Never run in repositories you don't own. --no-verify skips them.
β
veyra commit --smart / --split [--dry-run]
β
Optional AI (see veyra ai). --smart proposes a message you accept, edit or reject; --split proposes a sequence of commits for the staged change, by file or by hunk (hunks of one file can go to different commits), validated to cover every file and hunk exactly once before you see it. Each commit is a normal, undoable commit with an Assisted-by: trailer, and hooks and secret scanning still run.
Rust regex syntax; exits 1 when nothing matches, like Git
git bisect start/good/bad/skip/run/log/reset
veyra bisect β¦
β
Picks the commit that splits the candidates most evenly, merges included. run: exit 0 good, 125 skip, 1β127 bad. Every step is journaled. The session is Git's (BISECT_* files, refs/bisect/*), so either tool can continue or reset it.
git format-patch [-o dir] [--stdout] <range>
veyra format-patch
β
mbox files that git am applies
git apply [--cached|--index] [--check] [-R]
veyra apply
β
Git and plain unified diffs. Hunks apply at their position or where their context matches exactly, never fuzzily; nothing is written unless every file applies. Binary patches are refused. Journaled.
git am <mbox>β¦
veyra am
β
Reads git format-patch output (author, date, subject, body); one journaled commit per patch
git notes add/append/show/list/remove [--ref R]
veyra notes β¦
β
Git's notes layout (refs/notes/commits by default); git notes show reads Veyra's notes
β
veyra diff --semantic / --functions [--json]
β
Functions, methods, classes and types that were added, removed, modified, had their signature changed, were only reformatted, or renamed (renames need a token-identical, non-trivial body). Rust, TypeScript/TSX, JavaScript, Python, Go, Java, C, C++, C#, Ruby, PHP, Kotlin, Swift, Scala, Bash, Lua and Elixir (Tree-sitter). Other files are listed as unsupported.
Fast-forward, clean 3-way merge, or conflicts written exactly like Git (markers + index stages + MERGE_HEAD)
git merge -s ours|subtree, -X ours|theirs|subtree=<dir>, git merge A B C
veyra merge -s β¦ / -X β¦ / veyra merge A B C
β
-s ours keeps our tree; -X ours/theirs decides conflicting hunks; subtree merges find (or are told) the directory; an octopus merge with any conflict is refused before anything changes
git merge --abort / --continue
veyra merge --abort / --continue
β
Abort replays the operation log
git reset [--soft|--mixed|--hard] [rev]
veyra reset β¦
β
Difference:--hard checkpoints first
git reset <paths>
veyra reset <paths> / unstage
β
git cherry-pick [-x] [-n] [-m N]
veyra cherry-pick
β
Keeps the original author. Conflicts leave CHERRY_PICK_HEAD like Git. Several commits use Git's .git/sequencer, so --continue / --skip / --abort work from either tool.
git revert [-n] [-m N]
veyra revert
β
The safe way to reverse pushed commits. --continue / --skip / --abort, sequences shared with Git.
git rebase <upstream> [--onto X]
veyra rebase
β
Defaults to the branch's upstream. --continue / --skip / --abort. State lives in Git's .git/rebase-merge, so a rebase started by either tool can be continued or aborted by the other. veyra undo restores the pre-rebase branch.
git rebase -i
veyra rebase -i <upstream>
β
pick, reword, edit, squash, fixup, drop, exec, break (and their one-letter forms), plus reordering. Uses GIT_SEQUENCE_EDITOR / sequence.editor, then the commit editor.
Git's own .git/rr-cache format and conflict ids: resolutions recorded by Veyra are replayed by Git and vice versa. Enabled by rerere.enabled (or an existing rr-cache). Replays apply to merges, cherry-picks, reverts, rebases and stash applications, slightly shifted conflicts included; rerere.autoUpdate stages them. Every replay is reported.
When Git's line merge conflicts but the two sides changed different top-level symbols, Veyra merges the file symbol by symbol. It refuses on syntax errors, same-symbol edits, delete-vs-modify and reorders on both sides, and re-parses the result. Every resolution is printed, and recorded as a Veyra-Structural-Merge: trailer. veyra.structuralMerge = true Β· stage (resolve, then stop for review) Β· false.
β
veyra merge <branch> --assist / veyra ai resolve [paths]
β
AI-proposed resolutions for the conflicts that remain after structural merge and rerere. Proposals that still contain markers or don't parse are discarded; the rest are shown as a diff with a confidence level. Accepting stages the file (journaled, so veyra undo restores the conflict). --yes accepts only high-confidence proposals; uncertain ones always need a person.
Undoes the latest operation: any Veyra command, or a change made with plain git. Touches only what that operation changed, and refuses if those things changed again (unless --force, which is itself undoable).
veyra undo commit
β
The same, but checks that the last operation really is a commit (β git reset --soft HEAD~1)
veyra redo [--force]
β
Re-applies the last undone operation
veyra op log [-n N] [--all] [--json]
β
The operation journal, newest first, with β undo / β redo markers
veyra op show <id>
β
Refs, HEAD, index and file changes of one operation
veyra op restore <id> [--before]
β
Makes the whole repository match that moment
veyra op prune --older-than 30d
β
Retention (the newest 20 are always kept)
veyra checkpoint [-m msg]
β
Snapshots tracked and untracked, non-ignored files. No commit, index untouched, never pushed.
veyra checkpoint list / diff <id> / restore <id> [paths]
β
restore takes a fresh checkpoint first
veyra checkpoint enable / disable
β
Toggles veyra.autoCheckpoint (snapshot on every command)
veyra checkpoint watch --interval 10m
β
Foreground timer, no daemon
veyra checkpoint prune --older-than 14d
β
veyra stash [push] [-m] [-u] [--keep-index] / list / show [-p] / apply [--index] / pop / drop / clear (aliases shelve, unshelve)
β
Same refs/stash structure and reflog as Git: git stash and veyra stash see each other's entries. A conflicted pop keeps the entry.
veyra clean -f [-d] [-n] [paths]
β
Like git clean, but the files are checkpointed first, so veyra undo brings them back. Ignored files are never removed (no -x yet).
Implemented on gix's transport (HTTPS, SSH, local). Supports -u, --tags, --delete, +refspec, --force, --force-with-lease, --dry-run, --no-verify. Credential helpers are used. Changed blobs are sent as deltas against their previous version (a thin pack, like git push --thin).
git ls-remote [--heads] [--tags] [remote|url]
veyra remote refs (alias veyra ls-remote)
β
Same output as git ls-remote; --json
β
veyra sync [--push]
β
Fetch, then fast-forward, or rebase onto the upstream if both sides moved. Refuses with uncommitted changes. Pushes only with --push.
Preflight (tag is new, clean tree, changes since the last release; warnings for non-semver versions, not on the default branch, unpushed, unsigned, no test attestation), then an annotated tag with the release notes. Journaled.
β
veyra release verify <tag>
β
Tag signature, signature status of every commit in the release, attestations; exits non-zero on a bad signature
PASS/WARN/FAIL with evidence for identity, integrity, in-progress ops, storage, large files, secrets, branches, journal and compatibility. --full also rehashes and parses every object, verifies pack checksums and checks connectivity. Exits non-zero on FAIL.
veyra security scan [--staged | --rev R] [--json]
β
Built-in and custom rules, redacted output, fingerprints. Exits non-zero on high-confidence findings.
veyra security allow <fingerprint>
β
Allowlists a reviewed false positive in .veyra/secrets.toml
veyra intent create --title β¦ [--guard-path G --guard-contains T]
β
Writes .veyra/intents/<id>.toml
veyra intent list / show / verify [--staged|--rev] / close / log