diff --git a/demos/git_compat.png b/demos/git_compat.png index 2fa3665704..2fed33eec6 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..05a4c2db54 --- /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.797atbeKNs/Hello-World" +Working copy now at: mrqoukpw 7d999b33 (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()' +@  mrqoukpw jjfan@example.com 2023-09-07 23:04:10.000 -07:00 7d999b33 +│  (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 +7d999b3  +| * ad57f93  +| * 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..b7607b3b56 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..3f2ce69561 --- /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 +@  xlxtvvxq jjfan@example.com 2023-09-07 23:04:11.221 -07:00 2240028d +│  (empty) (no description set) +◉  nsrwsrlz jjfan@example.com 2023-09-07 23:04:11.221 -07:00 third d85ec2cd +│  third +◉  nnqzqxss jjfan@example.com 2023-09-07 23:04:11.173 -07:00 second f6c19130 +│  second +◉  ylukqtsn jjfan@example.com 2023-09-07 23:04:11.116 -07:00 first 6d284964 +│  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: xlxtvvxq c69bf581 (conflict) (empty) (no description set) +Parent commit      : nsrwsrlz ac3f88ea third | (conflict) third +Added 0 files, modified 1 files, removed 0 files +$ jj rebase -s second -d third +Rebased 1 commits +$ jj log +◉  nnqzqxss jjfan@example.com 2023-09-07 23:04:11.356 -07:00 second 629f2e95 +│  second +│ @  xlxtvvxq jjfan@example.com 2023-09-07 23:04:11.332 -07:00 c69bf581 conflict +├─╯  (empty) (no description set) +◉  nsrwsrlz jjfan@example.com 2023-09-07 23:04:11.332 -07:00 third ac3f88ea conf +lict +│  third +◉  ylukqtsn jjfan@example.com 2023-09-07 23:04:11.116 -07:00 first 6d284964 +│  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: qyoznpyy fe02fe87 (empty) (no description set) +Parent commit      : nnqzqxss 629f2e95 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: qyoznpyy 058f3f31 (empty) (no description set) +Parent commit      : nnqzqxss 0f2f6997 second | second +Added 0 files, modified 1 files, removed 0 files +$ jj merge second third -m merged +Working copy now at: svryqmrm 4f0cef67 (empty) merged +Parent commit      : nnqzqxss 0f2f6997 second | second +Parent commit      : nsrwsrlz ac3f88ea third | (conflict) third +Added 0 files, modified 1 files, removed 0 files +$ jj log +@    svryqmrm jjfan@example.com 2023-09-07 23:04:11.450 -07:00 4f0cef67 +├─╮  (empty) merged +│ ◉  nsrwsrlz jjfan@example.com 2023-09-07 23:04:11.332 -07:00 third ac3f88ea co +nflict +│ │  third +◉ │  nnqzqxss jjfan@example.com 2023-09-07 23:04:11.428 -07:00 second 0f2f6997 +├─╯  second +◉  ylukqtsn jjfan@example.com 2023-09-07 23:04:11.116 -07:00 first 6d284964 +│  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..f3caf829dd 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..1d63d49501 --- /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 +@  21a8b5098a67 jjfan@jujube now, lasted 1 millisecond +│  check out git remote's default branch +│  args: jj git clone https://github.com/octocat/Hello-World +◉  df4025278210 jjfan@jujube now, lasted 482 milliseconds +│  fetch from git remote into empty repo +│  args: jj git clone https://github.com/octocat/Hello-World +◉  89c6ed2b004a jjfan@jujube now, lasted 2 milliseconds +│  add workspace 'default' +◉  bac91d79beee 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: rsyoqruq b37ebcc1 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: rsyoqruq 477ac703 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: nslpzlsk faa7b03f (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: nslpzlsk e383a39d (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 +@  nslpzlsk jjfan@example.com 2023-09-07 23:04:12.000 -07:00 e383a39d +│  (empty) other stuff +│ ◉  rsyoqruq jjfan@example.com 2023-09-07 23:04:12.000 -07:00 477ac703 +│ │  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 +@  fdb46f8e3179 jjfan@jujube now, lasted less than a microsecond +│  describe commit faa7b03f722f1a832bd9df4e1aa020ac198205d2 +│  args: jj describe -m 'other stuff' +◉  2db03476ad98 jjfan@jujube now, lasted 1 millisecond +│  check out commit 7fd1a60b01f91b314f59955a4e4d4e80d8edf11d +│  args: jj co master +◉  08983e17f737 jjfan@jujube now, lasted 1 millisecond +│  rebase commit b37ebcc14afded7264216f5e6c5f683e1698ccb1 and descendants +│  args: jj rebase -d test +◉  36f2f2d43e6c jjfan@jujube now, lasted 1 millisecond + +# Let's undo that rebase operation: + +$ jj undo fdb46f8e +Working copy now at: nslpzlsk faa7b03f (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 +@  nslpzlsk jjfan@example.com 2023-09-07 23:04:11.000 -07:00 faa7b03f +│  (empty) (no description set) +│ ◉  rsyoqruq jjfan@example.com 2023-09-07 23:04:12.000 -07:00 477ac703 +│ │  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 fdb46f8e log +@  nslpzlsk jjfan@example.com 2023-09-07 23:04:12.000 -07:00 e383a39d +│  (empty) other stuff +│ ◉  rsyoqruq jjfan@example.com 2023-09-07 23:04:12.000 -07:00 477ac703 +│ │  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 fdb46f8e +Working copy now at: nslpzlsk e383a39d (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 +@  nslpzlsk jjfan@example.com 2023-09-07 23:04:12.000 -07:00 e383a39d +│  (empty) other stuff +│ ◉  rsyoqruq jjfan@example.com 2023-09-07 23:04:12.000 -07:00 477ac703 +│ │  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..474978dabe 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..eb66b1c639 --- /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()' +@  xlpxynxz jjfan@example.com 2023-09-07 23:04:14.000 -07:00 50745c7e +│  (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: xlpxynxz 86b3059c (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: xlpxynxz 733c38d1 (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()' +@  xlpxynxz jjfan@example.com 2023-09-07 23:04:14.000 -07:00 733c38d1 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 : xlpxynxz 733c38d1 (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 : xlpxynxz 64436765 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..ec0263f306 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..906c69c30c --- /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 : xmqpxkzz 7f5ad936 (empty) (no description set) +Parent commit: orrkosyo 7fd1a60b master | (empty) Merge pull request #6 from Spa +ceghost/patch-1 +$ jj log +@  xmqpxkzz jjfan@example.com 2023-09-07 23:04:15.000 -07:00 7f5ad936 +│  (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 : xmqpxkzz bd14d101 (no description set) +Parent commit: orrkosyo 7fd1a60b master | (empty) Merge pull request #6 from Spa +ceghost/patch-1 +$ jj log +@  xmqpxkzz jjfan@example.com 2023-09-07 23:04:15.000 -07:00 bd14d101 +│  (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 +@  xmqpxkzz jjfan@example.com 2023-09-07 23:04:15.000 -07:00 goodbye bd14d101 +│  (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: tuvyopun 78131926 (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 +@  tuvyopun jjfan@example.com 2023-09-07 23:04:14.000 -07:00 78131926 +│  (empty) (no description set) +│ ◉  xmqpxkzz jjfan@example.com 2023-09-07 23:04:15.000 -07:00 goodbye bd14d101 +├─╯  (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 : tuvyopun 78131926 (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: tuvyopun ed027f9a 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 +◉  xmqpxkzz jjfan@example.com 2023-09-07 23:04:15.000 -07:00 goodbye cec5bea4 +│  goodbye +│ @  tuvyopun jjfan@example.com 2023-09-07 23:04:15.000 -07:00 ed027f9a +├─╯  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 +~ + + +