diff --git a/demos/git_compat.png b/demos/git_compat.png index 2fa3665704..a4f53b8820 100644 Binary files a/demos/git_compat.png and b/demos/git_compat.png differ diff --git a/demos/git_compat.svg b/demos/git_compat.svg new file mode 100644 index 0000000000..4e1ea7e764 --- /dev/null +++ b/demos/git_compat.svg @@ -0,0 +1,87 @@ + + + + + + + +# Clone a Git repo: + +$ jj git clone https://github.com/octocat/Hello-World +Fetching into new repo in "/tmp/tmp.siYsjYh1Tz/Hello-World" +Working copy now at: pllyvunw 937c2627 (empty) (no description set) +Parent commit      : orrkosyo 7fd1a60b master | (empty) Merge pull request #6 fr +om Spaceghost/patch-1 +Added 1 files, modified 0 files, removed 0 files +$ cd Hello-World + +# Inspect it: + +$ jj log -r 'all()' +@  pllyvunw jjfan@example.com 2023-09-08 00:13:11.000 -07:00 937c2627 +│  (empty) (no description set) +│ ◉  tpstlust support+octocat@github.com 2018-05-10 12:55:19.000 -05:00 octocat- +patch-1 b1b3f972 +├─╯  sentence case +│ ◉  kowxouwz octocat@nowhere.com 2014-06-10 15:22:26.000 -07:00 test b3cbd5bb +├─╯  Create CONTRIBUTING.md +◉    orrkosyo octocat@nowhere.com 2012-03-06 15:06:50.000 -08:00 master 7fd1a60b +├─╮  (empty) Merge pull request #6 from Spaceghost/patch-1 +│ ◉  nznozkvv Johnneylee.rollins@gmail.com 2011-09-13 21:42:41.000 -07:00 762941 +31 +├─╯  New line at end of file. --Signed off by Spaceghost +◉  syktoqts cameron@github.com 2011-01-26 11:06:08.000 -08:00 553c2077 +│  first commit +◉  zzzzzzzz root() 00000000 +$ jj diff -r b1 +Modified regular file README: +   1    1: Hello Worldworld! + +# The repo is backed by the actual Git repo: + +$ git --git-dir=.jj/repo/store/git log --graph --all --decorate --oneline +937c262  +| * 54112ea  +| * b1b3f97 (origin/octocat-patch-1) sentence case +|/   +| * b3cbd5b (origin/test) Create CONTRIBUTING.md +|/   +*   7fd1a60 (origin/master) Merge pull request #6 from Spaceghost/patch-1 +|\   +| * 7629413 New line at end of file. --Signed off by Spaceghost +|/   +553c207 first commit + + + diff --git a/demos/juggle_conflicts.png b/demos/juggle_conflicts.png index c5a661dcfa..7692e241a3 100644 Binary files a/demos/juggle_conflicts.png and b/demos/juggle_conflicts.png differ diff --git a/demos/juggle_conflicts.svg b/demos/juggle_conflicts.svg new file mode 100644 index 0000000000..d3c27a0766 --- /dev/null +++ b/demos/juggle_conflicts.svg @@ -0,0 +1,130 @@ + + + + + + + +# We are in a repo with three commits, all +# editing the same line: + +$ jj log +@  lqolpuok jjfan@example.com 2023-09-08 00:13:12.055 -07:00 516b6fde +│  (empty) (no description set) +◉  ulqzkotz jjfan@example.com 2023-09-08 00:13:12.054 -07:00 third 799e6435 +│  third +◉  znqkmvtr jjfan@example.com 2023-09-08 00:13:12.014 -07:00 second 6d78fede +│  second +◉  nmumlrrx jjfan@example.com 2023-09-08 00:13:11.963 -07:00 first acf126ab +│  first +◉  zzzzzzzz root() 00000000 +$ jj diff -r first +Added regular file file: +        1first +$ jj diff -r second +Modified regular file file: +   1    1firstsecond +$ jj diff -r third +Modified regular file file: +   1    1secondthird + +# Let's reorder the second and third commits: + +$ jj rebase -s third -d first +Rebased 2 commits +Working copy now at: lqolpuok 76d913b0 (conflict) (empty) (no description set) +Parent commit      : ulqzkotz 99109874 third | (conflict) third +Added 0 files, modified 1 files, removed 0 files +$ jj rebase -s second -d third +Rebased 1 commits +$ jj log +◉  znqkmvtr jjfan@example.com 2023-09-08 00:13:12.182 -07:00 second 774f448d +│  second +│ @  lqolpuok jjfan@example.com 2023-09-08 00:13:12.159 -07:00 76d913b0 conflict +├─╯  (empty) (no description set) +◉  ulqzkotz jjfan@example.com 2023-09-08 00:13:12.159 -07:00 third 99109874 conf +lict +│  third +◉  nmumlrrx jjfan@example.com 2023-09-08 00:13:11.963 -07:00 first acf126ab +│  first +◉  zzzzzzzz root() 00000000 + +# The commit labeled "third" has a conflict, +# as expected. What's more interesting is +# that the top commit has no conflict! That's +# because it has the changes from all three +# commits applied to it. + + +# Let's verify that by looking at its contents: + +$ jj co second +Working copy now at: psnpqsts 608079bd (empty) (no description set) +Parent commit      : znqkmvtr 774f448d second | second +Added 0 files, modified 1 files, removed 0 files +$ cat file +third + +# Let's now instead make "second" and "third" +# sibling and merge them: + +$ jj rebase -s second -d first +Rebased 2 commits +Working copy now at: psnpqsts ccfe38e6 (empty) (no description set) +Parent commit      : znqkmvtr 4657e51c second | second +Added 0 files, modified 1 files, removed 0 files +$ jj merge second third -m merged +Working copy now at: wknwsvqz ad256547 (empty) merged +Parent commit      : znqkmvtr 4657e51c second | second +Parent commit      : ulqzkotz 99109874 third | (conflict) third +Added 0 files, modified 1 files, removed 0 files +$ jj log +@    wknwsvqz jjfan@example.com 2023-09-08 00:13:12.291 -07:00 ad256547 +├─╮  (empty) merged +│ ◉  ulqzkotz jjfan@example.com 2023-09-08 00:13:12.159 -07:00 third 99109874 co +nflict +│ │  third +◉ │  znqkmvtr jjfan@example.com 2023-09-08 00:13:12.260 -07:00 second 4657e51c +├─╯  second +◉  nmumlrrx jjfan@example.com 2023-09-08 00:13:11.963 -07:00 first acf126ab +│  first +◉  zzzzzzzz root() 00000000 + +# Again, because the merge commit has the +# changes from all three commits, it has no +# conflict. + + + + diff --git a/demos/operation_log.png b/demos/operation_log.png index 7a4e1a3c5d..3972774cb8 100644 Binary files a/demos/operation_log.png and b/demos/operation_log.png differ diff --git a/demos/operation_log.svg b/demos/operation_log.svg new file mode 100644 index 0000000000..3ae0d9fb5d --- /dev/null +++ b/demos/operation_log.svg @@ -0,0 +1,169 @@ + + + + + + + +# We are in the octocat/Hello-World repo. +# The "operation log" shows the operations +# so far: + +$ jj op log +@  b6bc845a7722 jjfan@jujube now, lasted 2 milliseconds +│  check out git remote's default branch +│  args: jj git clone https://github.com/octocat/Hello-World +◉  6a4557b33d01 jjfan@jujube now, lasted 516 milliseconds +│  fetch from git remote into empty repo +│  args: jj git clone https://github.com/octocat/Hello-World +◉  5f4f251275eb jjfan@jujube now, lasted 1 millisecond +│  add workspace 'default' +◉  4a0c44fa77d0 jjfan@jujube now, lasted less than a microsecond +   initialize repo + +# We are going to make some changes to show +# how the operation log works. Let's add a file, set +# a description, and rebase onto the "test" branch: + +$ echo stuff > new-file +$ jj describe -m stuff +Working copy now at: puymppks 6a85f5ad stuff +Parent commit      : orrkosyo 7fd1a60b master | (empty) Merge pull request #6 fr +om Spaceghost/patch-1 +$ jj rebase -d test +Rebased 1 commits +Working copy now at: puymppks 2c8fc056 stuff +Parent commit      : kowxouwz b3cbd5bb test | Create CONTRIBUTING.md +Added 1 files, modified 0 files, removed 0 files + +# We are now going to make another change off of +# master: + +$ jj co master +Working copy now at: mnknqurz 0b7bdfb2 (empty) (no description set) +Parent commit      : orrkosyo 7fd1a60b master | (empty) Merge pull request #6 fr +om Spaceghost/patch-1 +Added 0 files, modified 0 files, removed 2 files +$ jj describe -m "other stuff" +Working copy now at: mnknqurz 20d39b84 (empty) other stuff +Parent commit      : orrkosyo 7fd1a60b master | (empty) Merge pull request #6 fr +om Spaceghost/patch-1 + +# The repo now looks like this: + +$ jj log +@  mnknqurz jjfan@example.com 2023-09-08 00:13:13.000 -07:00 20d39b84 +│  (empty) other stuff +│ ◉  puymppks jjfan@example.com 2023-09-08 00:13:13.000 -07:00 2c8fc056 +│ │  stuff +│ ◉  kowxouwz octocat@nowhere.com 2014-06-10 15:22:26.000 -07:00 test b3cbd5bb +├─╯  Create CONTRIBUTING.md +◉  orrkosyo octocat@nowhere.com 2012-03-06 15:06:50.000 -08:00 master 7fd1a60b +│  (empty) Merge pull request #6 from Spaceghost/patch-1 +~ + +# The most recent portion of the operation log +# is: + +$ jj op log | head +@  f8d4b387110d jjfan@jujube now, lasted 1 millisecond +│  describe commit 0b7bdfb2574c9267d17e0b392e5bd093cf4ef28c +│  args: jj describe -m 'other stuff' +◉  83c93b0d59a8 jjfan@jujube now, lasted 1 millisecond +│  check out commit 7fd1a60b01f91b314f59955a4e4d4e80d8edf11d +│  args: jj co master +◉  4daea32f5ce7 jjfan@jujube now, lasted 1 millisecond +│  rebase commit 6a85f5adf7ca87cf83df7a98d9195024a58bcf18 and descendants +│  args: jj rebase -d test +◉  3d90ffc60b66 jjfan@jujube now, lasted 1 millisecond + +# Let's undo that rebase operation: + +$ jj undo f8d4b387 +Working copy now at: mnknqurz 0b7bdfb2 (empty) (no description set) +Parent commit      : orrkosyo 7fd1a60b master | (empty) Merge pull request #6 fr +om Spaceghost/patch-1 + +# Note that only the rebase was undone, and the +# subsequent "other stuff" change was not undone: + +$ jj log +@  mnknqurz jjfan@example.com 2023-09-08 00:13:12.000 -07:00 0b7bdfb2 +│  (empty) (no description set) +│ ◉  puymppks jjfan@example.com 2023-09-08 00:13:13.000 -07:00 2c8fc056 +│ │  stuff +│ ◉  kowxouwz octocat@nowhere.com 2014-06-10 15:22:26.000 -07:00 test b3cbd5bb +├─╯  Create CONTRIBUTING.md +◉  orrkosyo octocat@nowhere.com 2012-03-06 15:06:50.000 -08:00 master 7fd1a60b +│  (empty) Merge pull request #6 from Spaceghost/patch-1 +~ + +# We can also see what the repo looked like +# after the rebase operation: + +$ jj --at-op f8d4b387 log +@  mnknqurz jjfan@example.com 2023-09-08 00:13:13.000 -07:00 20d39b84 +│  (empty) other stuff +│ ◉  puymppks jjfan@example.com 2023-09-08 00:13:13.000 -07:00 2c8fc056 +│ │  stuff +│ ◉  kowxouwz octocat@nowhere.com 2014-06-10 15:22:26.000 -07:00 test b3cbd5bb +├─╯  Create CONTRIBUTING.md +◉  orrkosyo octocat@nowhere.com 2012-03-06 15:06:50.000 -08:00 master 7fd1a60b +│  (empty) Merge pull request #6 from Spaceghost/patch-1 +~ + +# Let's say we instead want to go back to the +# state of the repo right after the rebase: + +$ jj op restore f8d4b387 +Working copy now at: mnknqurz 20d39b84 (empty) other stuff +Parent commit      : orrkosyo 7fd1a60b master | (empty) Merge pull request #6 fr +om Spaceghost/patch-1 + +# We're now back to before the "other stuff" +# change existed: + +$ jj log +@  mnknqurz jjfan@example.com 2023-09-08 00:13:13.000 -07:00 20d39b84 +│  (empty) other stuff +│ ◉  puymppks jjfan@example.com 2023-09-08 00:13:13.000 -07:00 2c8fc056 +│ │  stuff +│ ◉  kowxouwz octocat@nowhere.com 2014-06-10 15:22:26.000 -07:00 test b3cbd5bb +├─╯  Create CONTRIBUTING.md +◉  orrkosyo octocat@nowhere.com 2012-03-06 15:06:50.000 -08:00 master 7fd1a60b +│  (empty) Merge pull request #6 from Spaceghost/patch-1 +~ + + + diff --git a/demos/resolve_conflicts.png b/demos/resolve_conflicts.png index 4b96de3461..5a81e5b82a 100644 Binary files a/demos/resolve_conflicts.png and b/demos/resolve_conflicts.png differ diff --git a/demos/resolve_conflicts.svg b/demos/resolve_conflicts.svg new file mode 100644 index 0000000000..c228b160fc --- /dev/null +++ b/demos/resolve_conflicts.svg @@ -0,0 +1,139 @@ + + + + + + + +# We are on the master branch of the +# octocat/Hello-World repo: + +$ jj log -r 'all()' +@  lkuvyqsm jjfan@example.com 2023-09-08 00:13:15.000 -07:00 75c242c2 +│  (empty) (no description set) +│ ◉  tpstlust support+octocat@github.com 2018-05-10 12:55:19.000 -05:00 octocat- +patch-1 b1b3f972 +├─╯  sentence case +│ ◉  kowxouwz octocat@nowhere.com 2014-06-10 15:22:26.000 -07:00 test b3cbd5bb +├─╯  Create CONTRIBUTING.md +◉    orrkosyo octocat@nowhere.com 2012-03-06 15:06:50.000 -08:00 master 7fd1a60b +├─╮  (empty) Merge pull request #6 from Spaceghost/patch-1 +│ ◉  nznozkvv Johnneylee.rollins@gmail.com 2011-09-13 21:42:41.000 -07:00 762941 +31 +├─╯  New line at end of file. --Signed off by Spaceghost +◉  syktoqts cameron@github.com 2011-01-26 11:06:08.000 -08:00 553c2077 +│  first commit +◉  zzzzzzzz root() 00000000 + +# Let's make an edit that will conflict +# when we rebase it: + +$ jj describe -m "README: say which world" +Working copy now at: lkuvyqsm b68462bf (empty) README: say which world +Parent commit      : orrkosyo 7fd1a60b master | (empty) Merge pull request #6 fr +om Spaceghost/patch-1 +$ echo "Hello Earth!" > README +$ jj diff +Modified regular file README: +   1    1: Hello WorldEarth! + +# We're going to rebase it onto commit b1. +# That commit looks like this: + +$ jj diff -r b1 +Modified regular file README: +   1    1: Hello Worldworld! + +# Now rebase: + +$ jj rebase -d b1 +Rebased 1 commits +Working copy now at: lkuvyqsm 9c56cf88 (conflict) README: say which world +Parent commit      : tpstlust b1b3f972 octocat-patch-1 | sentence case +Added 0 files, modified 1 files, removed 0 files + +# Huh, that seemed to succeed. Let's take a +# look at the repo: + +$ jj log -r 'all()' +@  lkuvyqsm jjfan@example.com 2023-09-08 00:13:15.000 -07:00 9c56cf88 conflict +│  README: say which world +◉  tpstlust support+octocat@github.com 2018-05-10 12:55:19.000 -05:00 octocat-pa +tch-1 b1b3f972 +│  sentence case +│ ◉  kowxouwz octocat@nowhere.com 2014-06-10 15:22:26.000 -07:00 test b3cbd5bb +├─╯  Create CONTRIBUTING.md +◉    orrkosyo octocat@nowhere.com 2012-03-06 15:06:50.000 -08:00 master 7fd1a60b +├─╮  (empty) Merge pull request #6 from Spaceghost/patch-1 +│ ◉  nznozkvv Johnneylee.rollins@gmail.com 2011-09-13 21:42:41.000 -07:00 762941 +31 +├─╯  New line at end of file. --Signed off by Spaceghost +◉  syktoqts cameron@github.com 2011-01-26 11:06:08.000 -08:00 553c2077 +│  first commit +◉  zzzzzzzz root() 00000000 +$ jj status +Working copy changes: +M README +There are unresolved conflicts at these paths: +README    2-sided conflict +Working copy : lkuvyqsm 9c56cf88 (conflict) README: say which world +Parent commit: tpstlust b1b3f972 octocat-patch-1 | sentence case + +# As you can see, the rebased commit has a +# conflict. The file in the working copy looks +# like this: + +$ cat README +<<<<<<< +%%%%%%% +-Hello World! ++Hello world! ++++++++ +Hello Earth! +>>>>>>> + +# Now we will resolve the conflict: + +$ echo "Hello earth!" > README + +# The status command no longer reports it: + +$ jj status +Working copy changes: +M README +Working copy : lkuvyqsm 748d9c67 README: say which world +Parent commit: tpstlust b1b3f972 octocat-patch-1 | sentence case + + + diff --git a/demos/working_copy.png b/demos/working_copy.png index 85f25d7af1..000aa2b0ac 100644 Binary files a/demos/working_copy.png and b/demos/working_copy.png differ diff --git a/demos/working_copy.svg b/demos/working_copy.svg new file mode 100644 index 0000000000..506502cbca --- /dev/null +++ b/demos/working_copy.svg @@ -0,0 +1,141 @@ + + + + + + + +# We are in the octocat/Hello-World repo. +# We have an empty working copy on top of master: + +$ jj status +The working copy is clean +Working copy : ptuoxlsy 82c3d215 (empty) (no description set) +Parent commit: orrkosyo 7fd1a60b master | (empty) Merge pull request #6 from Spa +ceghost/patch-1 +$ jj log +@  ptuoxlsy jjfan@example.com 2023-09-08 00:13:16.000 -07:00 82c3d215 +│  (empty) (no description set) +◉  orrkosyo octocat@nowhere.com 2012-03-06 15:06:50.000 -08:00 master 7fd1a60b +│  (empty) Merge pull request #6 from Spaceghost/patch-1 +~ + +# Now make some changes in the working copy: + +$ echo "Goodbye World!" > README +$ echo stuff > new-file + +# Our working copy's commit ID changed +# because we made changes: + +$ jj status +Working copy changes: +M README +A new-file +Working copy : ptuoxlsy ec0bcd49 (no description set) +Parent commit: orrkosyo 7fd1a60b master | (empty) Merge pull request #6 from Spa +ceghost/patch-1 +$ jj log +@  ptuoxlsy jjfan@example.com 2023-09-08 00:13:16.000 -07:00 ec0bcd49 +│  (no description set) +◉  orrkosyo octocat@nowhere.com 2012-03-06 15:06:50.000 -08:00 master 7fd1a60b +│  (empty) Merge pull request #6 from Spaceghost/patch-1 +~ + +# Add a branch so we can easily refer to this +# commit: + +$ jj branch create goodbye +$ jj log +@  ptuoxlsy jjfan@example.com 2023-09-08 00:13:16.000 -07:00 goodbye ec0bcd49 +│  (no description set) +◉  orrkosyo octocat@nowhere.com 2012-03-06 15:06:50.000 -08:00 master 7fd1a60b +│  (empty) Merge pull request #6 from Spaceghost/patch-1 +~ + +# Start working on a new change off of master: + +$ jj co master +Working copy now at: sslozlpz 2cf84c81 (empty) (no description set) +Parent commit      : orrkosyo 7fd1a60b master | (empty) Merge pull request #6 fr +om Spaceghost/patch-1 +Added 0 files, modified 1 files, removed 1 files +$ jj log +@  sslozlpz jjfan@example.com 2023-09-08 00:13:15.000 -07:00 2cf84c81 +│  (empty) (no description set) +│ ◉  ptuoxlsy jjfan@example.com 2023-09-08 00:13:16.000 -07:00 goodbye ec0bcd49 +├─╯  (no description set) +◉  orrkosyo octocat@nowhere.com 2012-03-06 15:06:50.000 -08:00 master 7fd1a60b +│  (empty) Merge pull request #6 from Spaceghost/patch-1 +~ + +# Note that the working copy is now clean; the +# "goodbye" change stayed in its own commit: + +$ jj status +The working copy is clean +Working copy : sslozlpz 2cf84c81 (empty) (no description set) +Parent commit: orrkosyo 7fd1a60b master | (empty) Merge pull request #6 from Spa +ceghost/patch-1 + +# Modify a file in this new change: + +$ echo "Hello everyone!" > README + +# The working copy is not special; we can, for +# example, set the description of any commit. +# First, set it on the working copy: + +$ jj describe -m everyone +Working copy now at: sslozlpz b703d0b1 everyone +Parent commit      : orrkosyo 7fd1a60b master | (empty) Merge pull request #6 fr +om Spaceghost/patch-1 + +# Now set it on the change we worked on before: + +$ jj describe goodbye -m goodbye + +# Inspect the result: + +$ jj log +◉  ptuoxlsy jjfan@example.com 2023-09-08 00:13:16.000 -07:00 goodbye df028e0e +│  goodbye +│ @  sslozlpz jjfan@example.com 2023-09-08 00:13:16.000 -07:00 b703d0b1 +├─╯  everyone +◉  orrkosyo octocat@nowhere.com 2012-03-06 15:06:50.000 -08:00 master 7fd1a60b +│  (empty) Merge pull request #6 from Spaceghost/patch-1 +~ + + +