ff show¶
Show one revision's identity, author, age, message, and patch. With no revision, show @, the open change, with the same patch as ff diff.
Usage¶
Usage: ff show [OPTIONS] [rev] [path]...
Examples¶
ff show # Open change with its header
ff show HEAD # Latest recorded commit
ff show HEAD~2 src/ # An earlier commit, filtered by path
ff show --stat HEAD # File counts instead of a patch
ff show --no-patch HEAD~3 # Header and message only
ff show --json # Header and patch as fields
ff git show HEAD:file.txt # Read a blob through Git
Options¶
Arguments:
[rev]
The revision; `@`, the open change, when omitted
[path]...
Files or directories to limit the patch to; all of them when omitted
Options:
--stat
Print the diffstat instead of the patch
--name-only
Print one path per line with its change type instead of the patch
--no-patch
Print the header and message only
--json
Emit machine-readable JSON
-U, --unified <n>
Context lines around each change; 3 when omitted
--fetch
Fetch now on commands that support fetching, regardless of cadence
--no-fetch
Skip the fetch: read the tracking refs as they stand
--session <name>
Session name for this invocation
--fields <list>
Keep only these dotted paths of the JSON data, comma-separated
-C, --cwd <dir>
Run as if fufu had been started in <dir>
-h, --help
Print help (see a summary with '-h')
Revisions and paths¶
The first argument is a revision expression selecting exactly one member. @ means the open change; @^ means HEAD. A change-ID prefix needs four or more characters and a unique match; the open change's ID selects @. Subsequent paths select files or directory prefixes, without globs. They are checked against disk and HEAD, so a second revision in the path slot, such as ff show HEAD <sha>, is refused with usage/no-such-path rather than read as a filter that matches nothing.
Commit SHAs and operation IDs are both hexadecimal, but this position reads revisions. Use ff op show for operations. Blobs and trees use Git's syntax through ff git show.
Message¶
Show prints the full message: the subject, then a blank line and the body when present. The open change's pending description uses the same format. JSON carries subject and body; body is empty for a one-line message.
Patches and signatures¶
Use --stat for per-file change counts, --name-only for paths and change types, or --no-patch for the header and message alone. These three flags are mutually exclusive. -U <n> sets the number of context lines in patches, 3 by default; it has no effect without a patch.
A commit is compared with its parent, or the empty tree for a root commit. A merge is compared with the auto-merge of its parents. A clean merge with no additional edits shows (a clean merge: nothing beyond its parents) and commands to compare it with each parent.
If the parents' auto-merge conflicts or has no common ancestor, show compares the merge with its first parent and explains the fallback in the header. That patch includes changes brought in from the other parents as well as the merge's own edits or resolution.
In JSON, against is parent, auto-merge, or first-parent. --stat omits each file's hunks; --name-only keeps path, from, kind, and binary per file and omits change counts. --no-patch omits changes, insertions, and deletions.
A signed commit is verified and receives a signature line with the verdict and signer. An unsigned commit has no signature line and runs no signer. JSON includes the result in signature.