{
  "product": "Specification (reference)",
  "title": "Version Control System",
  "summary": "Track history, branch, merge — and never lose committed work.",
  "category": "devtools",
  "entries": [
    {
      "path": [
        "AI",
        "Objects",
        "Content-addressed immutable objects"
      ],
      "value": "commits, trees, blobs",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "Objects",
        "A commit records parents, author, message and tree"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "Objects",
        "History is a DAG, not a line"
      ],
      "value": "",
      "status": "yes",
      "note": "merges have two parents"
    },
    {
      "path": [
        "AI",
        "Working",
        "Stage a subset of changes before committing"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "Working",
        "Diff working tree, index and any commit"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "Working",
        "Discard, stash and restore changes"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "Branching",
        "Create, switch, delete branches cheaply"
      ],
      "value": "",
      "status": "yes",
      "note": "a branch is a pointer"
    },
    {
      "path": [
        "AI",
        "Branching",
        "Merge with conflict markers and a resolution step"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "Branching",
        "Rebase, with the history-rewriting consequences documented"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "Remotes",
        "Fetch, push, pull with tracking branches"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "Remotes",
        "Reject non-fast-forward pushes by default"
      ],
      "value": "",
      "status": "yes",
      "note": "force is explicit"
    },
    {
      "path": [
        "AI",
        "Safety",
        "Committed work is recoverable after any local mistake"
      ],
      "value": "",
      "status": "yes",
      "note": "reflog or equivalent"
    },
    {
      "path": [
        "AI",
        "Safety",
        "Integrity check over the object store"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "History",
        "Log with filters by path, author, range"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "History",
        "Blame — attribute each line to a commit"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "History",
        "Bisect to find the commit that introduced a change"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "Ignore",
        "Ignore rules, per directory and global"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "Hooks",
        "Lifecycle hooks with a documented contract"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    }
  ]
}
