ok/jj
1
0
Fork 0
forked from mirrors/jj
jj/v0.11.0/glossary/index.html
Ilya Grigoriev f67d6a192c docs SEO (direct website push): Use "latest" URL as canonical URL for older versions
The replacement was done by `sed`.

This should only change versions of the docs prior to 864869ab (in
particular, not the `latest` version nor the `prerelease` version), and
make it as though the old version of the docs were compiled with that
commit. It tries to solve the same problem:
https://www.google.com/search?q=jj+revsets still points to jj v0.13
docs.

Google seems really slow to update its index, and I'm beginning to worry
that it might think we have a spammy site with many almost identical
pages. I hope it will pick up this change once it tries to update its
crawl of pages it's already indexing.

Loosely related reading: https://news.ycombinator.com/item?id=40970987
2024-07-25 14:29:08 -07:00

1650 lines
No EOL
40 KiB
HTML

<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="canonical" href="https://martinvonz.github.io/jj/latest/glossary/">
<link rel="prev" href="../operation-log/">
<link rel="next" href="../config/">
<link rel="icon" href="../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.5.2, mkdocs-material-9.2.5">
<title>Glossary - Jujutsu docs</title>
<link rel="stylesheet" href="../assets/stylesheets/main.0e669242.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
</head>
<body dir="ltr">
<script>var palette=__md_get("__palette");if(palette&&"object"==typeof palette.color)for(var key of Object.keys(palette.color))document.body.setAttribute("data-md-color-"+key,palette.color[key])</script>
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#glossary" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<div data-md-color-scheme="default" data-md-component="outdated" hidden>
</div>
<header class="md-header md-header--shadow" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href=".." title="Jujutsu docs" class="md-header__button md-logo" aria-label="Jujutsu docs" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"/></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
Jujutsu docs
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Glossary
</span>
</div>
</div>
</div>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
</label>
<nav class="md-search__options" aria-label="Search">
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg>
</button>
</nav>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list" role="presentation"></ol>
</div>
</div>
</div>
</div>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href=".." title="Jujutsu docs" class="md-nav__button md-logo" aria-label="Jujutsu docs" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"/></svg>
</a>
Jujutsu docs
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href=".." class="md-nav__link">
<span class="md-ellipsis">
Home
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2" >
<label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="0">
<span class="md-ellipsis">
Getting started
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_2">
<span class="md-nav__icon md-icon"></span>
Getting started
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../install-and-setup/" class="md-nav__link">
<span class="md-ellipsis">
Installation and Setup
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../tutorial/" class="md-nav__link">
<span class="md-ellipsis">
Tutorial and Birds-Eye View
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../github/" class="md-nav__link">
<span class="md-ellipsis">
Working with GitHub
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../FAQ/" class="md-nav__link">
<span class="md-ellipsis">
FAQ
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" checked>
<label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
<span class="md-ellipsis">
Concepts
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_4">
<span class="md-nav__icon md-icon"></span>
Concepts
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../working-copy/" class="md-nav__link">
<span class="md-ellipsis">
Working Copy
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../branches/" class="md-nav__link">
<span class="md-ellipsis">
Branches
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../conflicts/" class="md-nav__link">
<span class="md-ellipsis">
Conflicts
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../operation-log/" class="md-nav__link">
<span class="md-ellipsis">
Operation Log
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
<span class="md-ellipsis">
Glossary
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
Glossary
</span>
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#anonymous-branch" class="md-nav__link">
Anonymous branch
</a>
</li>
<li class="md-nav__item">
<a href="#backend" class="md-nav__link">
Backend
</a>
</li>
<li class="md-nav__item">
<a href="#branch" class="md-nav__link">
Branch
</a>
</li>
<li class="md-nav__item">
<a href="#change" class="md-nav__link">
Change
</a>
</li>
<li class="md-nav__item">
<a href="#change-id" class="md-nav__link">
Change ID
</a>
</li>
<li class="md-nav__item">
<a href="#commit" class="md-nav__link">
Commit
</a>
</li>
<li class="md-nav__item">
<a href="#commit-id" class="md-nav__link">
Commit ID
</a>
</li>
<li class="md-nav__item">
<a href="#co-located-repos" class="md-nav__link">
Co-located repos
</a>
</li>
<li class="md-nav__item">
<a href="#conflict" class="md-nav__link">
Conflict
</a>
</li>
<li class="md-nav__item">
<a href="#divergent-change" class="md-nav__link">
Divergent change
</a>
</li>
<li class="md-nav__item">
<a href="#head" class="md-nav__link">
Head
</a>
</li>
<li class="md-nav__item">
<a href="#hidden-commits-abandoned-commits" class="md-nav__link">
Hidden commits, abandoned commits
</a>
</li>
<li class="md-nav__item">
<a href="#operation" class="md-nav__link">
Operation
</a>
</li>
<li class="md-nav__item">
<a href="#operation-log" class="md-nav__link">
Operation log
</a>
</li>
<li class="md-nav__item">
<a href="#repository" class="md-nav__link">
Repository
</a>
</li>
<li class="md-nav__item">
<a href="#remote" class="md-nav__link">
Remote
</a>
</li>
<li class="md-nav__item">
<a href="#revision" class="md-nav__link">
Revision
</a>
</li>
<li class="md-nav__item">
<a href="#revset" class="md-nav__link">
Revset
</a>
</li>
<li class="md-nav__item">
<a href="#rewrite" class="md-nav__link">
Rewrite
</a>
</li>
<li class="md-nav__item">
<a href="#root-commit" class="md-nav__link">
Root commit
</a>
</li>
<li class="md-nav__item">
<a href="#tree" class="md-nav__link">
Tree
</a>
</li>
<li class="md-nav__item">
<a href="#visible-commits" class="md-nav__link">
Visible commits
</a>
</li>
<li class="md-nav__item">
<a href="#view" class="md-nav__link">
View
</a>
</li>
<li class="md-nav__item">
<a href="#workspace" class="md-nav__link">
Workspace
</a>
</li>
<li class="md-nav__item">
<a href="#working-copy" class="md-nav__link">
Working copy
</a>
</li>
<li class="md-nav__item">
<a href="#working-copy-commit" class="md-nav__link">
Working-copy commit
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5" >
<label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="0">
<span class="md-ellipsis">
Configuration
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_5">
<span class="md-nav__icon md-icon"></span>
Configuration
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../config/" class="md-nav__link">
<span class="md-ellipsis">
Settings
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../revsets/" class="md-nav__link">
<span class="md-ellipsis">
Revset language
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../templates/" class="md-nav__link">
<span class="md-ellipsis">
Templating language
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6" >
<label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex="0">
<span class="md-ellipsis">
Comparisons
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_6">
<span class="md-nav__icon md-icon"></span>
Comparisons
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../git-comparison/" class="md-nav__link">
<span class="md-ellipsis">
Git comparison
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../git-compatibility/" class="md-nav__link">
<span class="md-ellipsis">
Git compatibility
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../sapling-comparison/" class="md-nav__link">
<span class="md-ellipsis">
Sapling
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../related-work/" class="md-nav__link">
<span class="md-ellipsis">
Other related work
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_7" >
<label class="md-nav__link" for="__nav_7" id="__nav_7_label" tabindex="0">
<span class="md-ellipsis">
Technical details
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_7_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_7">
<span class="md-nav__icon md-icon"></span>
Technical details
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../technical/architecture/" class="md-nav__link">
<span class="md-ellipsis">
Architecture
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../technical/concurrency/" class="md-nav__link">
<span class="md-ellipsis">
Concurrency
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../technical/conflicts/" class="md-nav__link">
<span class="md-ellipsis">
Conflicts
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8" >
<label class="md-nav__link" for="__nav_8" id="__nav_8_label" tabindex="0">
<span class="md-ellipsis">
Contributing
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_8_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_8">
<span class="md-nav__icon md-icon"></span>
Contributing
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../contributing/" class="md-nav__link">
<span class="md-ellipsis">
Guidelines and "How to...?"
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../code-of-conduct/" class="md-nav__link">
<span class="md-ellipsis">
Code of conduct
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_9" >
<label class="md-nav__link" for="__nav_9" id="__nav_9_label" tabindex="0">
<span class="md-ellipsis">
Design docs
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_9_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_9">
<span class="md-nav__icon md-icon"></span>
Design docs
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../design/git-submodules/" class="md-nav__link">
<span class="md-ellipsis">
git-submodules
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../design/git-submodule-storage/" class="md-nav__link">
<span class="md-ellipsis">
git-submodule-storage
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../design/run/" class="md-nav__link">
<span class="md-ellipsis">
JJ run
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../design/tracking-branches/" class="md-nav__link">
<span class="md-ellipsis">
Tracking branches
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#anonymous-branch" class="md-nav__link">
Anonymous branch
</a>
</li>
<li class="md-nav__item">
<a href="#backend" class="md-nav__link">
Backend
</a>
</li>
<li class="md-nav__item">
<a href="#branch" class="md-nav__link">
Branch
</a>
</li>
<li class="md-nav__item">
<a href="#change" class="md-nav__link">
Change
</a>
</li>
<li class="md-nav__item">
<a href="#change-id" class="md-nav__link">
Change ID
</a>
</li>
<li class="md-nav__item">
<a href="#commit" class="md-nav__link">
Commit
</a>
</li>
<li class="md-nav__item">
<a href="#commit-id" class="md-nav__link">
Commit ID
</a>
</li>
<li class="md-nav__item">
<a href="#co-located-repos" class="md-nav__link">
Co-located repos
</a>
</li>
<li class="md-nav__item">
<a href="#conflict" class="md-nav__link">
Conflict
</a>
</li>
<li class="md-nav__item">
<a href="#divergent-change" class="md-nav__link">
Divergent change
</a>
</li>
<li class="md-nav__item">
<a href="#head" class="md-nav__link">
Head
</a>
</li>
<li class="md-nav__item">
<a href="#hidden-commits-abandoned-commits" class="md-nav__link">
Hidden commits, abandoned commits
</a>
</li>
<li class="md-nav__item">
<a href="#operation" class="md-nav__link">
Operation
</a>
</li>
<li class="md-nav__item">
<a href="#operation-log" class="md-nav__link">
Operation log
</a>
</li>
<li class="md-nav__item">
<a href="#repository" class="md-nav__link">
Repository
</a>
</li>
<li class="md-nav__item">
<a href="#remote" class="md-nav__link">
Remote
</a>
</li>
<li class="md-nav__item">
<a href="#revision" class="md-nav__link">
Revision
</a>
</li>
<li class="md-nav__item">
<a href="#revset" class="md-nav__link">
Revset
</a>
</li>
<li class="md-nav__item">
<a href="#rewrite" class="md-nav__link">
Rewrite
</a>
</li>
<li class="md-nav__item">
<a href="#root-commit" class="md-nav__link">
Root commit
</a>
</li>
<li class="md-nav__item">
<a href="#tree" class="md-nav__link">
Tree
</a>
</li>
<li class="md-nav__item">
<a href="#visible-commits" class="md-nav__link">
Visible commits
</a>
</li>
<li class="md-nav__item">
<a href="#view" class="md-nav__link">
View
</a>
</li>
<li class="md-nav__item">
<a href="#workspace" class="md-nav__link">
Workspace
</a>
</li>
<li class="md-nav__item">
<a href="#working-copy" class="md-nav__link">
Working copy
</a>
</li>
<li class="md-nav__item">
<a href="#working-copy-commit" class="md-nav__link">
Working-copy commit
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1 id="glossary">Glossary<a class="headerlink" href="#glossary" title="Permanent link">&para;</a></h1>
<h2 id="anonymous-branch">Anonymous branch<a class="headerlink" href="#anonymous-branch" title="Permanent link">&para;</a></h2>
<p>An anonymous branch is a chain of commits that doesn't have any
<a href="#branch">named branches</a> pointing to it or to any of its descendants. Unlike
Git, Jujutsu keeps commits on anonymous branches around until they are
explicitly abandoned. Visible anonymous branches are tracked by the
<a href="#view">view</a>, which stores a list of <a href="#head">heads</a> of such branches.</p>
<h2 id="backend">Backend<a class="headerlink" href="#backend" title="Permanent link">&para;</a></h2>
<p>A backend is an implementation of the storage layer. There are currently two
builtin commit backends: the Git backend and the native backend. The Git backend
stores commits in a Git repository. The native backend is used for testing
purposes only. Alternative backends could be used, for example, if somebody
wanted to use jj with a humongous monorepo (as Google does).</p>
<p>There are also pluggable backends for storing other information than commits,
such as the "operation store backend" for storing
<a href="#operation-log">the operation log</a>.</p>
<h2 id="branch">Branch<a class="headerlink" href="#branch" title="Permanent link">&para;</a></h2>
<p>A branch is a named pointer to a <a href="#commit">commit</a>. They automatically follow
the commit if it gets <a href="#rewrite">rewritten</a>. Branches are sometimes called
"named branches" to distinguish them from
<a href="#anonymous-branch">anonymous branches</a>, but note that they are more similar
to Git's branches than to
<a href="https://www.mercurial-scm.org/wiki/Branch#Named_branches">Mercurial's named branches</a>.
See <a href="../branches/">here</a> for details.</p>
<h2 id="change">Change<a class="headerlink" href="#change" title="Permanent link">&para;</a></h2>
<p>A change is a commit as it <a href="#rewrite">evolves over time</a>.</p>
<h2 id="change-id">Change ID<a class="headerlink" href="#change-id" title="Permanent link">&para;</a></h2>
<p>A change ID is a unique identifier for a <a href="#change">change</a>. They are typically
16 bytes long and are often randomly generated. By default, <code>jj log</code> presents
them as a sequence of 12 letters in the k-z range, at the beginning of a line.
These are actually hexadecimal numbers that use "digits" z-k instead of 0-9a-f.</p>
<p>For the git backend, Change IDs are currently maintained only locally and not
exchanged via push/fetch operations.</p>
<h2 id="commit">Commit<a class="headerlink" href="#commit" title="Permanent link">&para;</a></h2>
<p>A snapshot of the files in the repository at a given point in time (technically
a <a href="#tree">tree object</a>), together with some metadata. The metadata includes the
author, the date, and pointers to the commit's parents. Through the pointers to
the parents, the commits form a
<a href="https://en.wikipedia.org/wiki/Directed_acyclic_graph">Directed Acyclic Graph (DAG)</a>
.</p>
<p>Note that even though commits are stored as snapshots, they are often treated
as differences between snapshots, namely compared to their parent's snapshot. If
they have more than one parent, then the difference is computed against the
result of merging the parents. For example, <code>jj diff</code> will show the differences
introduced by a commit compared to its parent(s), and <code>jj rebase</code> will apply
those changes onto another base commit.</p>
<p>The word "revision" is used as a synonym for "commit".</p>
<h2 id="commit-id">Commit ID<a class="headerlink" href="#commit-id" title="Permanent link">&para;</a></h2>
<p>A commit ID is a unique identifier for a <a href="#commit">commit</a>. They are 20 bytes
long when using the Git backend. They are presented in regular hexadecimal
format at the end of the line in <code>jj log</code>, using 12 hexadecimal digits by
default. When using the Git backend, the commit ID is the Git commit ID.</p>
<h2 id="co-located-repos">Co-located repos<a class="headerlink" href="#co-located-repos" title="Permanent link">&para;</a></h2>
<p>When using the Git <a href="#backend">backend</a> and the backing Git repository's <code>.git/</code>
directory is a sibling of <code>.jj/</code>, we call the repository "co-located". Most
tools designed for Git can be easily used on such repositories. <code>jj</code> and <code>git</code>
commands can be used interchangeably.</p>
<p>See <a href="../git-compatibility/#co-located-jujutsugit-repos">here</a> for details.</p>
<h2 id="conflict">Conflict<a class="headerlink" href="#conflict" title="Permanent link">&para;</a></h2>
<p>Conflicts can occur in many places. The most common type is conflicts in files.
Those are the conflicts that users coming from other VCSs are usually familiar
with. You can see them in <code>jj status</code> and in <code>jj log</code> (the red "conflict"
label at the end of the line). See <a href="../conflicts/">here</a> for details.</p>
<p>Conflicts can also occur in <a href="#branch">branches</a>. For example, if you moved a
branch locally, and it was also moved on the remote, then the branch will be
in a conflicted state after you pull from the remote.
See <a href="../branches/#conflicts">here</a> for details.</p>
<p>Similar to a branch conflict, when a <a href="#change">change</a> is rewritten locally
and remotely, for example, then the change will be in a conflicted state. We
call that a <a href="#divergent-change">divergent change</a>.</p>
<h2 id="divergent-change">Divergent change<a class="headerlink" href="#divergent-change" title="Permanent link">&para;</a></h2>
<p>A divergent change is a <a href="#change">change</a> that has more than one
<a href="#visible-commits">visible commit</a>.</p>
<h2 id="head">Head<a class="headerlink" href="#head" title="Permanent link">&para;</a></h2>
<p>A head is a commit with no descendants. The context in which it has no
descendants varies. For example, the <code>heads(X)</code>
<a href="../revsets/#functions">revset function</a> returns commits that have no descendants
within the set <code>X</code> itself. The <a href="#view">view</a> records which
anonymous heads (heads without a branch pointing to them) are visible at a
given <a href="#operation">operation</a>. Note that this is quite different from Git's
<a href="https://git-scm.com/book/en/v2/Git-Internals-Git-References#ref_the_ref">HEAD</a>.</p>
<h2 id="hidden-commits-abandoned-commits">Hidden commits, abandoned commits<a class="headerlink" href="#hidden-commits-abandoned-commits" title="Permanent link">&para;</a></h2>
<p>See <a href="#visible-commits">visible commits</a>.</p>
<h2 id="operation">Operation<a class="headerlink" href="#operation" title="Permanent link">&para;</a></h2>
<p>A snapshot of the <a href="#visible-commits">visible commits</a> and <a href="#branches">branches</a>
at a given point in time (technically a <a href="#view">view object</a>), together with
some metadata. The metadata includes the username, hostname, timestamps, and
pointers to the operation's parents.</p>
<h2 id="operation-log">Operation log<a class="headerlink" href="#operation-log" title="Permanent link">&para;</a></h2>
<p>The operation log is the
<a href="https://en.wikipedia.org/wiki/Directed_acyclic_graph">DAG</a> formed by
<a href="#operation">operation</a> objects, much in the same way that commits form a DAG,
which is sometimes called the "commit history". When operations happen in
sequence, they form a single line in the graph. Operations that happen
concurrently from jj's perspective result in forks and merges in the DAG.</p>
<h2 id="repository">Repository<a class="headerlink" href="#repository" title="Permanent link">&para;</a></h2>
<p>Basically everything under <code>.jj/</code>, i.e. the full set of <a href="#operation">operations</a>
and <a href="#commit">commits</a>.</p>
<h2 id="remote">Remote<a class="headerlink" href="#remote" title="Permanent link">&para;</a></h2>
<p>TODO</p>
<h2 id="revision">Revision<a class="headerlink" href="#revision" title="Permanent link">&para;</a></h2>
<p>A synonym for <a href="#commit">Commit</a>.</p>
<h2 id="revset">Revset<a class="headerlink" href="#revset" title="Permanent link">&para;</a></h2>
<p>Jujutsu supports a functional language for selecting a set of revisions.
Expressions in this language are called "revsets". See <a href="../revsets/">here</a> for
details. We also often use the term "revset" for the set of revisions selected
by a revset.</p>
<h2 id="rewrite">Rewrite<a class="headerlink" href="#rewrite" title="Permanent link">&para;</a></h2>
<p>To "rewrite" a commit means to create a new version of that commit with
different contents, metadata (including parent pointers), or both. Rewriting a
commit results in a new commit, and thus a new <a href="#commit-id">commit ID</a>, but the
<a href="#change-id">change ID</a> generally remains the same. Some examples of rewriting a
commit would be changing its description or rebasing it. Modifying the working
copy rewrites the working copy commit.</p>
<h2 id="root-commit">Root commit<a class="headerlink" href="#root-commit" title="Permanent link">&para;</a></h2>
<p>The root commit is a virtual commit at the root of every repository. It has a
commit ID consisting of all '0's (<code>00000000...</code>) and a change ID consisting of
all 'z's (<code>zzzzzzzz...</code>). It can be referred to in <a href="#revset">revsets</a> by the
function <code>root()</code>. Note that our definition of "root commit" is different from
Git's; Git's "root commits" are the first commit(s) in the repository, i.e. the
commits <code>jj log -r root()+</code> will show.</p>
<h2 id="tree">Tree<a class="headerlink" href="#tree" title="Permanent link">&para;</a></h2>
<p>A tree object represents a snapshot of a directory in the repository. Tree
objects are defined recursively; each tree object only has the files and
directories contained directly in the directory it represents.</p>
<h2 id="visible-commits">Visible commits<a class="headerlink" href="#visible-commits" title="Permanent link">&para;</a></h2>
<p>Visible commits are the commits you see in <code>jj log -r 'all()'</code>. They are the
commits that are reachable from an anonymous head in the <a href="#view">view</a>.
Ancestors of a visible commit are implicitly visible.</p>
<p>Intuitively, visible commits are the "latest versions" of a revision with a
given <a href="#change-id">change id</a>. A commit that's abandoned or
<a href="#rewrite">rewritten</a> stops being visible and is labeled as "hidden". Such
commits are no longer accessible using a change id, but they are still
accessible by their <a href="#commit-id">commit id</a>.</p>
<h2 id="view">View<a class="headerlink" href="#view" title="Permanent link">&para;</a></h2>
<p>A view is a snapshot of branches and their targets, anonymous heads,
and working-copy commits. The anonymous heads define which commits
are <a href="#visible-commits">visible</a>.</p>
<p>A view object is similar to a <a href="#tree">tree</a> object in that it represents a
snapshot without history, and an <a href="#operation">operation</a> object is similar to a
<a href="#commit">commit</a> object in that it adds metadata and history.</p>
<h2 id="workspace">Workspace<a class="headerlink" href="#workspace" title="Permanent link">&para;</a></h2>
<p>A workspace is a <a href="#working-copy">working copy</a> and an
associated <a href="#repository">repository</a>. There can be multiple workspaces for a
single repository. Each workspace has a <code>.jj/</code> directory, but the
<a href="#commit">commits</a> and <a href="#operation">operations</a> will be stored in the initial
workspace; the other workspaces will have pointers to the initial workspace. See
<a href="../working-copy/#workspaces">here</a> for details.</p>
<p>This is what Git calls a "worktree".</p>
<h2 id="working-copy">Working copy<a class="headerlink" href="#working-copy" title="Permanent link">&para;</a></h2>
<p>The working copy contains the files you're currently working on. It is
automatically snapshot at the beginning of almost every <code>jj</code> command, thus
creating a new <a href="#working-copy-commit">working-copy commit</a> if any changes had
been made in the working copy. Conversely, the working copy is automatically
updated to the state of the working-copy commit at the end of almost every <code>jj</code>
command. See <a href="../working-copy/">here</a> for details.</p>
<p>This is what Git calls a "working tree".</p>
<h2 id="working-copy-commit">Working-copy commit<a class="headerlink" href="#working-copy-commit" title="Permanent link">&para;</a></h2>
<p>A commit that corresponds to the current state of the working copy. There is
one working-copy commit per <a href="#workspace">workspace</a>. The current working-copy
commits are tracked in the <a href="#operation-log">operation log</a>.</p>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "..", "features": [], "search": "../assets/javascripts/workers/search.dfff1995.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": {"provider": "mike"}}</script>
<script src="../assets/javascripts/bundle.78eede0e.min.js"></script>
</body>
</html>