diff --git a/demos/demo_juggle_conflicts.sh b/demos/demo_juggle_conflicts.sh index 3016726631..8e26b521cb 100755 --- a/demos/demo_juggle_conflicts.sh +++ b/demos/demo_juggle_conflicts.sh @@ -14,7 +14,7 @@ new_tmp_dir echo "third" > file jj branch create third jj commit -m 'third' -) >/dev/null +) >/dev/null 2>&1 comment "We are in a repo with three commits, all editing the same line:" @@ -33,13 +33,13 @@ 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:" -run_command "jj co second" +run_command "jj new second" run_command "cat file" comment "Let's now instead make \"second\" and \"third\" sibling and merge them:" run_command "jj rebase -s second -d first" -run_command "jj merge second third -m merged" +run_command "jj new second third -m merged" run_command "jj log" comment "Again, because the merge commit has the changes from all three commits, it has no diff --git a/demos/demo_operation_log.sh b/demos/demo_operation_log.sh index f169bcf65b..8c15258190 100755 --- a/demos/demo_operation_log.sh +++ b/demos/demo_operation_log.sh @@ -6,9 +6,10 @@ new_tmp_dir { jj git clone https://github.com/octocat/Hello-World cd Hello-World - jj abandon octocat-patch-1 + jj abandon --ignore-immutable octocat-patch-1@origin jj branch forget octocat-patch-1 -} > /dev/null + jj branch track test@origin +} > /dev/null 2>&1 comment "We are in the octocat/Hello-World repo. The \"operation log\" shows the operations @@ -24,7 +25,7 @@ run_command "jj rebase -d test" comment "We are now going to make another change off of master:" -run_command "jj co master" +run_command "jj new master" run_command "jj describe -m \"other stuff\"" comment "The repo now looks like this:" diff --git a/demos/demo_resolve_conflicts.sh b/demos/demo_resolve_conflicts.sh index 60fb897320..2eea43dd70 100755 --- a/demos/demo_resolve_conflicts.sh +++ b/demos/demo_resolve_conflicts.sh @@ -6,9 +6,9 @@ new_tmp_dir { jj git clone https://github.com/octocat/Hello-World cd Hello-World - jj abandon test + jj abandon --ignore-immutable test@origin jj branch forget test -} > /dev/null +} > /dev/null 2>&1 comment "We are on the master branch of the octocat/Hello-World repo:" diff --git a/demos/demo_working_copy.sh b/demos/demo_working_copy.sh index 945441653f..a8b3195b46 100755 --- a/demos/demo_working_copy.sh +++ b/demos/demo_working_copy.sh @@ -6,11 +6,11 @@ new_tmp_dir { jj git clone https://github.com/octocat/Hello-World cd Hello-World - jj abandon test + jj abandon --ignore-immutable test@origin jj branch forget test - jj abandon octocat-patch-1 + jj abandon --ignore-immutable octocat-patch-1@origin jj branch forget octocat-patch-1 -}> /dev/null +}> /dev/null 2>&1 comment "We are in the octocat/Hello-World repo. We have an empty working copy on top of master:" @@ -31,7 +31,7 @@ run_command "jj branch create goodbye" run_command "jj log" comment "Start working on a new change off of master:" -run_command "jj co master" +run_command "jj new master" comment "Note that we were told the working copy is now empty (AKA clean). The \"goodbye\" change stayed in its own commit:" diff --git a/demos/git_compat.svg b/demos/git_compat.svg index e331405666..1e876fd48b 100644 --- a/demos/git_compat.svg +++ b/demos/git_compat.svg @@ -1,5 +1,5 @@ - + - + # Clone a Git repo: $ jj git clone https://github.com/octocat/Hello-World -Fetching into new repo in "/tmp/tmp.C155mhhXK5/Hello-World" -Working copy now at: skzsvnwo 5359150b (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()' -@  skzsvnwo jjfan@example.com 2023-10-03 17:53:24.000 -07:00 5359150b -│  (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 -├─╯  76294131 -│    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! +Fetching into new repo in "/private/var/folders/lj/rv4h95_d0mxb9ryztzpz4qph0000g +n/T/tmp.rCeLeGo5XE/Hello-World" +branch: master@origin          [new] untracked +branch: octocat-patch-1@origin [new] untracked +branch: test@origin            [new] untracked +Setting the revset alias "trunk()" to "master@origin" +Working copy now at: zvllqtky 715cf97c (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()' +@  zvllqtky jjfan@example.com 2024-09-04 19:21:07 715cf97c +│  (empty) (no description set) +│   tpstlust support+octocat@github.com 2018-05-10 10:55:19 +├─╯  octocat-patch-1@origin b1b3f972 +│    sentence case +│   kowxouwz octocat@nowhere.com 2014-06-10 15:22:26 test@origin b3cbd5bb +├─╯  Create CONTRIBUTING.md +    orrkosyo octocat@nowhere.com 2012-03-06 16:06:50 master 7fd1a60b +├─╮  (empty) Merge pull request #6 from Spaceghost/patch-1 +│   nznozkvv Johnneylee.rollins@gmail.com 2011-09-13 21:42:41 76294131 +├─╯  New line at end of file. --Signed off by Spaceghost +  syktoqts cameron@github.com 2011-01-26 12:06:08 553c2077 +│  first commit +  zzzzzzzz root() 00000000 -# The repo is backed by the actual Git repo: - -$ git --git-dir=.jj/repo/store/git log --graph --all --decorate --oneline -d232bdd  -5359150  -| * 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 +$ 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 +715cf97  +| * c74ad88  +| * 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.svg b/demos/juggle_conflicts.svg index bea3e7b3b9..19494c4dbb 100644 --- a/demos/juggle_conflicts.svg +++ b/demos/juggle_conflicts.svg @@ -1,5 +1,5 @@ - + - + # We are in a repo with three commits, all # editing the same line: $ jj log -@  yunnnwvo jjfan@example.com 2023-10-03 17:53:25.563 -07:00 38d0479d +@  nwrxxwvp jjfan@example.com 2024-09-04 19:21:07 677e8b20 │  (empty) (no description set) -◉  nvktsnuz jjfan@example.com 2023-10-03 17:53:25.563 -07:00 third ee26fd86 +○  kxkysnnp jjfan@example.com 2024-09-04 19:21:07 third e46a5b6b │  third -◉  oozovxnq jjfan@example.com 2023-10-03 17:53:25.502 -07:00 second 1242b1fd +○  uxwutvtk jjfan@example.com 2024-09-04 19:21:07 second c28c3b1f │  second -◉  qvwkrmvo jjfan@example.com 2023-10-03 17:53:25.439 -07:00 first 513e2a6d +○  mmykwquz jjfan@example.com 2024-09-04 19:21:07 first 66a5c156 │  first -◉  zzzzzzzz root() 00000000 +  zzzzzzzz root() 00000000 $ jj diff -r first Added regular file file: -        1first +        1first $ jj diff -r second Modified regular file file: -   1    1firstsecond +   1    1firstsecond $ jj diff -r third Modified regular file file: -   1    1secondthird +   1    1secondthird # Let's reorder the second and third commits: $ jj rebase -s third -d first Rebased 2 commits -Working copy now at: yunnnwvo 3f07a2de (conflict) (empty) (no description set) -Parent commit      : nvktsnuz 9be78b4c third | (conflict) third -Added 0 files, modified 1 files, removed 0 files -$ jj rebase -s second -d third -Rebased 1 commits -$ jj log -◉  oozovxnq jjfan@example.com 2023-10-03 17:53:25.742 -07:00 second db5b5e19 -│  second -│ @  yunnnwvo jjfan@example.com 2023-10-03 17:53:25.712 -07:00 3f07a2de conflict -├─╯  (empty) (no description set) -◉  nvktsnuz jjfan@example.com 2023-10-03 17:53:25.712 -07:00 third 9be78b4c -│  conflict -│  third -◉  qvwkrmvo jjfan@example.com 2023-10-03 17:53:25.439 -07:00 first 513e2a6d -│  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: ppxyrxtk a9b71825 (empty) (no description set) -Parent commit      : oozovxnq db5b5e19 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: ppxyrxtk 46d0cfc1 (empty) (no description set) -Parent commit      : oozovxnq 7507959f second | second -Added 0 files, modified 1 files, removed 0 files -$ jj merge second third -m merged -Working copy now at: tumuouyq cf68a830 (empty) merged -Parent commit      : oozovxnq 7507959f second | second -Parent commit      : nvktsnuz 9be78b4c third | (conflict) third -Added 0 files, modified 1 files, removed 0 files -$ jj log -@    tumuouyq jjfan@example.com 2023-10-03 17:53:25.868 -07:00 cf68a830 -├─╮  (empty) merged -│ ◉  nvktsnuz jjfan@example.com 2023-10-03 17:53:25.712 -07:00 third 9be78b4c -│ │  conflict -│ │  third -◉ │  oozovxnq jjfan@example.com 2023-10-03 17:53:25.838 -07:00 second 7507959f -├─╯  second -◉  qvwkrmvo jjfan@example.com 2023-10-03 17:53:25.439 -07:00 first 513e2a6d -│  first -◉  zzzzzzzz root() 00000000 - -# Again, because the merge commit has the -# changes from all three commits, it has no -# conflict. - +New conflicts appeared in these commits: +  kxkysnnp a4fd3609 third | (conflict) third +To resolve the conflicts, start by updating to it: +  jj new kxkysnnptqrr +Then use `jj resolve`, or edit the conflict markers in the file directly. +Once the conflicts are resolved, you may want to inspect the result with `jj dif +f`. +Then run `jj squash` to move the resolution into the conflicted commit. +Working copy now at: nwrxxwvp ba88d346 (conflict) (empty) (no description set) +Parent commit      : kxkysnnp a4fd3609 third | (conflict) third +Added 0 files, modified 1 files, removed 0 files +There are unresolved conflicts at these paths: +file    2-sided conflict +$ jj rebase -s second -d third +Rebased 1 commits +$ jj log +○  uxwutvtk jjfan@example.com 2024-09-04 19:21:08 second 24797e0f +│  second +│ @  nwrxxwvp jjfan@example.com 2024-09-04 19:21:08 ba88d346 conflict +├─╯  (empty) (no description set) +×  kxkysnnp jjfan@example.com 2024-09-04 19:21:08 third a4fd3609 conflict +│  third +○  mmykwquz jjfan@example.com 2024-09-04 19:21:07 first 66a5c156 +│  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 new second +Working copy now at: yqxnlxwy 3adce64a (empty) (no description set) +Parent commit      : uxwutvtk 24797e0f 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: yqxnlxwy fc5c4bf3 (empty) (no description set) +Parent commit      : uxwutvtk c82c762d second | second +Added 0 files, modified 1 files, removed 0 files +$ jj new second third -m merged +Working copy now at: ssplpltu 8cd63e4d (empty) merged +Parent commit      : uxwutvtk c82c762d second | second +Parent commit      : kxkysnnp a4fd3609 third | (conflict) third +Added 0 files, modified 1 files, removed 0 files +$ jj log +@    ssplpltu jjfan@example.com 2024-09-04 19:21:08 8cd63e4d +├─╮  (empty) merged +│ ×  kxkysnnp jjfan@example.com 2024-09-04 19:21:08 third a4fd3609 conflict +│ │  third +○ │  uxwutvtk jjfan@example.com 2024-09-04 19:21:08 second c82c762d +├─╯  second +○  mmykwquz jjfan@example.com 2024-09-04 19:21:07 first 66a5c156 +│  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.svg b/demos/operation_log.svg index aacda3d4aa..701fa083d8 100644 --- a/demos/operation_log.svg +++ b/demos/operation_log.svg @@ -1,5 +1,5 @@ - + - + # We are in the octocat/Hello-World repo. @@ -41,130 +41,134 @@ # so far: $ jj op log -@  185753f764bf jjfan@jujube now, lasted less than a microsecond -│  forget branch octocat-patch-1 -│  args: jj branch forget octocat-patch-1 -◉  110d41221fe6 jjfan@jujube now, lasted less than a microsecond -│  abandon commit b1b3f9723831141a31a1a7252a213e216ea76e56 -│  args: jj abandon octocat-patch-1 -◉  107b52b37627 jjfan@jujube now, lasted less than a microsecond -│  check out git remote's default branch -│  args: jj git clone https://github.com/octocat/Hello-World -◉  abea1aadaeee jjfan@jujube now, lasted 410 milliseconds -│  fetch from git remote into empty repo +@  d1254d09462f jjfan@jujube now, lasted 1 millisecond +│  track remote branch test@origin +│  args: jj branch track test@origin +○  e105c6ebf0c3 jjfan@jujube now, lasted 1 millisecond +│  forget branch octocat-patch-1 +│  args: jj branch forget octocat-patch-1 +○  4c68250f080a jjfan@jujube now, lasted 3 milliseconds +│  abandon commit b1b3f9723831141a31a1a7252a213e216ea76e56 +│  args: jj abandon --ignore-immutable octocat-patch-1@origin +○  5f2752210b21 jjfan@jujube now, lasted 4 milliseconds +│  check out git remote's default branch │  args: jj git clone https://github.com/octocat/Hello-World -◉  e5b679e5ed3d jjfan@jujube now, lasted 1 millisecond -│  add workspace 'default' -◉  e65fdcb23853 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: +○  d9ebe25f912d jjfan@jujube now, lasted 794 milliseconds +│  fetch from git remote into empty repo +│  args: jj git clone https://github.com/octocat/Hello-World +○  79c60d07e3db jjfan@jujube now, lasted 14 milliseconds +│  add workspace 'default' +○  4b03a8ea38cb jjfan@jujube now, lasted less than a microsecond +│  initialize repo +○  000000000000 root() -$ echo stuff > new-file -$ jj describe -m stuff -Working copy now at: vwzqnovr b7d38236 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: vwzqnovr eba2142d 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: pnlnlkqn 47b7ab30 (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: pnlnlkqn c6c396f6 (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 -@  pnlnlkqn jjfan@example.com 2023-10-03 17:53:27.000 -07:00 c6c396f6 -│  (empty) other stuff -│ ◉  vwzqnovr jjfan@example.com 2023-10-03 17:53:27.000 -07:00 eba2142d -│ │  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 --limit 4 -@  d395e87c7fc6 jjfan@jujube now, lasted 1 millisecond -│  describe commit 47b7ab301cbbb3273d5acd42db579594bc9f58b4 -│  args: jj describe -m 'other stuff' -◉  4ec113b4994a jjfan@jujube now, lasted 1 millisecond -│  check out commit 7fd1a60b01f91b314f59955a4e4d4e80d8edf11d -│  args: jj co master -◉  781069b8c73d jjfan@jujube now, lasted 1 millisecond -│  rebase commit b7d38236713284f1a64c2f74ebe5e5e1655ff1b9 and descendants -│  args: jj rebase -d test -◉  4f6b60f68269 jjfan@jujube now, lasted less than a microsecond -│  describe commit e2b262f6ab3a977fcedb58835cf8f87b3b4277cb -│  args: jj describe -m stuff - -# Let's undo that rebase operation: - -$ jj undo 78106 +# 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: xkuyvtxv 7fb9281a 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: xkuyvtxv d4a43058 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 new master +Working copy now at: usuulptu c941f1bb (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: usuulptu dc950629 (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 +@  usuulptu jjfan@example.com 2024-09-04 19:21:10 dc950629 +│  (empty) other stuff +│ ○  xkuyvtxv jjfan@example.com 2024-09-04 19:21:10 d4a43058 +│ │  stuff +│ ○  kowxouwz octocat@nowhere.com 2014-06-10 15:22:26 test b3cbd5bb +├─╯  Create CONTRIBUTING.md +  orrkosyo octocat@nowhere.com 2012-03-06 16:06:50 master 7fd1a60b +│  (empty) Merge pull request #6 from Spaceghost/patch-1 +~ + +# The most recent portion of the operation log +# is: + +$ jj op log --limit 4 +@  a218c1df176c jjfan@jujube now, lasted 16 milliseconds +│  describe commit c941f1bb24197001c271b02a37f7ca28f36e17b0 +│  args: jj describe -m 'other stuff' +○  fa4e0babc454 jjfan@jujube now, lasted 14 milliseconds +│  new empty commit +│  args: jj new master +○  9c96ec25f257 jjfan@jujube now, lasted 15 milliseconds +│  rebase commit 7fb9281afa10aa6b40e5b730a459cc53ebc9c129 and descendants +│  args: jj rebase -d test +○  9e8206736a23 jjfan@jujube now, lasted 2 milliseconds +│  describe commit 1bc2da583b790b6288941b6858d5ecbbc9cee3b4 +│  args: jj describe -m stuff -# Note that only the rebase was undone, and the -# subsequent "other stuff" change was not undone: - -$ jj log -@  pnlnlkqn jjfan@example.com 2023-10-03 17:53:27.000 -07:00 c6c396f6 -│  (empty) other stuff -│ ◉  vwzqnovr jjfan@example.com 2023-10-03 17:53:27.000 -07:00 b7d38236 -├─╯  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 78106 log -@  vwzqnovr jjfan@example.com 2023-10-03 17:53:27.000 -07:00 eba2142d -│  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 78106 -Working copy now at: vwzqnovr eba2142d stuff -Parent commit      : kowxouwz b3cbd5bb test | Create CONTRIBUTING.md -Added 2 files, modified 0 files, removed 0 files - -# We're now back to before the "other stuff" -# change existed: - -$ jj log -@  vwzqnovr jjfan@example.com 2023-10-03 17:53:27.000 -07:00 eba2142d -│  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 undo that rebase operation: + +$ jj undo 9c96e + +# Note that only the rebase was undone, and the +# subsequent "other stuff" change was not undone: + +$ jj log +@  usuulptu jjfan@example.com 2024-09-04 19:21:10 dc950629 +│  (empty) other stuff +│ ○  xkuyvtxv jjfan@example.com 2024-09-04 19:21:10 7fb9281a +├─╯  stuff +│ ○  kowxouwz octocat@nowhere.com 2014-06-10 15:22:26 test b3cbd5bb +├─╯  Create CONTRIBUTING.md +  orrkosyo octocat@nowhere.com 2012-03-06 16:06:50 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 9c96e log +@  xkuyvtxv jjfan@example.com 2024-09-04 19:21:10 d4a43058 +│  stuff +○  kowxouwz octocat@nowhere.com 2014-06-10 15:22:26 test b3cbd5bb +│  Create CONTRIBUTING.md +  orrkosyo octocat@nowhere.com 2012-03-06 16:06:50 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 9c96e +Working copy now at: xkuyvtxv d4a43058 stuff +Parent commit      : kowxouwz b3cbd5bb test | Create CONTRIBUTING.md +Added 2 files, modified 0 files, removed 0 files + +# We're now back to before the "other stuff" +# change existed: + +$ jj log +@  xkuyvtxv jjfan@example.com 2024-09-04 19:21:10 d4a43058 +│  stuff +○  kowxouwz octocat@nowhere.com 2014-06-10 15:22:26 test b3cbd5bb +│  Create CONTRIBUTING.md +  orrkosyo octocat@nowhere.com 2012-03-06 16:06:50 master 7fd1a60b +│  (empty) Merge pull request #6 from Spaceghost/patch-1 +~ diff --git a/demos/resolve_conflicts.svg b/demos/resolve_conflicts.svg index b5b2788cea..03452a8057 100644 --- a/demos/resolve_conflicts.svg +++ b/demos/resolve_conflicts.svg @@ -1,5 +1,5 @@ - + - + # We are on the master branch of the # octocat/Hello-World repo: $ jj log -@  ynwsmqnv jjfan@example.com 2023-10-03 17:53:28.000 -07:00 7d1bd6e5 +@  oxmwolvs jjfan@example.com 2024-09-04 19:21:11 1c12dfd3 │  (empty) (no description set) -│ ◉  tpstlust support+octocat@github.com 2018-05-10 12:55:19.000 -05:00 -├─╯  octocat-patch-1 b1b3f972 -│    sentence case -◉  orrkosyo octocat@nowhere.com 2012-03-06 15:06:50.000 -08:00 master 7fd1a60b -│  (empty) Merge pull request #6 from Spaceghost/patch-1 -~ +  orrkosyo octocat@nowhere.com 2012-03-06 16:06:50 master 7fd1a60b +│  (empty) Merge pull request #6 from Spaceghost/patch-1 +~ + +# Let's make an edit that will conflict +# when we rebase it: -# Let's make an edit that will conflict -# when we rebase it: - -$ jj describe -m "README: say which world" -Working copy now at: ynwsmqnv bf5b4633 (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! +$ jj describe -m "README: say which world" +Working copy now at: oxmwolvs b4f72dbc (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: -# 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: ynwsmqnv 73754cb4 (conflict) README: say which world -Parent commit      : tpstlust b1b3f972 octocat-patch-1 | sentence case -Added 0 files, modified 1 files, removed 0 files - -# That seemed to succeed but we are also told there is now a conflict. -# Let's take a look at the repo: - -$ jj log -@  ynwsmqnv jjfan@example.com 2023-10-03 17:53:28.000 -07:00 73754cb4 conflict -│  README: say which world -◉  tpstlust support+octocat@github.com 2018-05-10 12:55:19.000 -05:00 -│  octocat-patch-1 b1b3f972 -│  sentence case -◉  orrkosyo octocat@nowhere.com 2012-03-06 15:06:50.000 -08:00 master 7fd1a60b -│  (empty) Merge pull request #6 from Spaceghost/patch-1 -~ -$ jj status -Working copy changes: -M README -There are unresolved conflicts at these paths: -README    2-sided conflict -Working copy : ynwsmqnv 73754cb4 (conflict) README: say which world -Parent commit: tpstlust b1b3f972 octocat-patch-1 | sentence case - -# Indeed, the rebased commit has a conflict. The conflicted 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 : ynwsmqnv fd4a85d0 README: say which world -Parent commit: tpstlust b1b3f972 octocat-patch-1 | sentence case +$ jj diff -r b1 +Modified regular file README: +   1    1: Hello Worldworld! + +# Now rebase: + +$ jj rebase -d b1 +Rebased 1 commits +New conflicts appeared in these commits: +  oxmwolvs d8d13eb1 (conflict) README: say which world +To resolve the conflicts, start by updating to it: +  jj new oxmwolvsqlku +Then use `jj resolve`, or edit the conflict markers in the file directly. +Once the conflicts are resolved, you may want to inspect the result with `jj dif +f`. +Then run `jj squash` to move the resolution into the conflicted commit. +Working copy now at: oxmwolvs d8d13eb1 (conflict) README: say which world +Parent commit      : tpstlust b1b3f972 octocat-patch-1@origin | sentence case +Added 0 files, modified 1 files, removed 0 files +There are unresolved conflicts at these paths: +README    2-sided conflict + +# That seemed to succeed but we are also told there is now a conflict. +# Let's take a look at the repo: + +$ jj log +@  oxmwolvs jjfan@example.com 2024-09-04 19:21:12 d8d13eb1 conflict +│  README: say which world +  tpstlust support+octocat@github.com 2018-05-10 10:55:19 +│  octocat-patch-1@origin b1b3f972 +│  sentence case +  orrkosyo octocat@nowhere.com 2012-03-06 16:06:50 master 7fd1a60b +│  (empty) Merge pull request #6 from Spaceghost/patch-1 +~ +$ jj status +Working copy changes: +M README +There are unresolved conflicts at these paths: +README    2-sided conflict +Working copy : oxmwolvs d8d13eb1 (conflict) README: say which world +Parent commit: tpstlust b1b3f972 octocat-patch-1@origin | sentence case + +# Indeed, the rebased commit has a conflict. The conflicted file +# in the working copy looks like this: + +$ cat README +<<<<<<< Conflict 1 of 1 +%%%%%%% Changes from base to side #1 +-Hello World! ++Hello world! ++++++++ Contents of side #2 +Hello Earth! +>>>>>>> Conflict 1 of 1 ends + +# 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 : oxmwolvs 5a5b8f48 README: say which world +Parent commit: tpstlust b1b3f972 octocat-patch-1@origin | sentence case diff --git a/demos/working_copy.svg b/demos/working_copy.svg index 2289b7af6a..6945370eed 100644 --- a/demos/working_copy.svg +++ b/demos/working_copy.svg @@ -1,5 +1,5 @@ - + - + # We are in the octocat/Hello-World repo. # We have an empty working copy on top of master: $ jj log -@  lqwsnlyv jjfan@example.com 2023-10-03 17:53:29.000 -07:00 9fe8faea +@  ttmypqzs jjfan@example.com 2024-09-04 19:21:13 21dac130 │  (empty) (no description set) -◉  orrkosyo octocat@nowhere.com 2012-03-06 15:06:50.000 -08:00 master 7fd1a60b +  orrkosyo octocat@nowhere.com 2012-03-06 16:06:50 master 7fd1a60b │  (empty) Merge pull request #6 from Spaceghost/patch-1 ~ $ jj status The working copy is clean -Working copy : lqwsnlyv 9fe8faea (empty) (no description set) +Working copy : ttmypqzs 21dac130 (empty) (no description set) Parent commit: orrkosyo 7fd1a60b master | (empty) Merge pull request #6 from Spa ceghost/patch-1 @@ -63,7 +63,7 @@ Working copy changes: M README A new-file -Working copy : lqwsnlyv c3038a2f (no description set) +Working copy : ttmypqzs a3925f25 (no description set) Parent commit: orrkosyo 7fd1a60b master | (empty) Merge pull request #6 from Spa ceghost/patch-1 @@ -71,73 +71,77 @@ # commit: $ jj branch create goodbye -$ jj log -@  lqwsnlyv jjfan@example.com 2023-10-03 17:53:30.000 -07:00 goodbye c3038a2f -│  (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: ppvvsuyx cb71a202 (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 - -# Note that we were told the working copy is now empty (AKA clean). The -# "goodbye" change stayed in its own commit: - -$ jj log -@  ppvvsuyx jjfan@example.com 2023-10-03 17:53:30.000 -07:00 cb71a202 -│  (empty) (no description set) -│ ◉  lqwsnlyv jjfan@example.com 2023-10-03 17:53:30.000 -07:00 goodbye c3038a2f -├─╯  (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 -~ - -# Let's do a sanity check: 'jj status' should tell us that -# the working copy is clean. - -$ jj status -The working copy is clean -Working copy : ppvvsuyx cb71a202 (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 -$ jj status -Working copy changes: -M README -Working copy : ppvvsuyx 404f6fd1 (no description set) -Parent commit: orrkosyo 7fd1a60b master | (empty) Merge pull request #6 from Spa -ceghost/patch-1 - -# 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 -... (output redacted) ... - -# Now set it on the change we worked on before: - -$ jj describe goodbye -m goodbye +Created 1 branches pointing to ttmypqzs a3925f25 goodbye | (no description set) +$ jj log +@  ttmypqzs jjfan@example.com 2024-09-04 19:21:13 goodbye a3925f25 +│  (no description set) +  orrkosyo octocat@nowhere.com 2012-03-06 16:06:50 master 7fd1a60b +│  (empty) Merge pull request #6 from Spaceghost/patch-1 +~ + +# Start working on a new change off of master: + +$ jj new master +Working copy now at: sykquxrt 9412b8bb (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 + +# Note that we were told the working copy is now empty (AKA clean). The +# "goodbye" change stayed in its own commit: + +$ jj log +@  sykquxrt jjfan@example.com 2024-09-04 19:21:14 9412b8bb +│  (empty) (no description set) +│ ○  ttmypqzs jjfan@example.com 2024-09-04 19:21:13 goodbye a3925f25 +├─╯  (no description set) +  orrkosyo octocat@nowhere.com 2012-03-06 16:06:50 master 7fd1a60b +│  (empty) Merge pull request #6 from Spaceghost/patch-1 +~ + +# Let's do a sanity check: 'jj status' should tell us that +# the working copy is clean. + +$ jj status +The working copy is clean +Working copy : sykquxrt 9412b8bb (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 +$ jj status +Working copy changes: +M README +Working copy : sykquxrt f3b4701e (no description set) +Parent commit: orrkosyo 7fd1a60b master | (empty) Merge pull request #6 from Spa +ceghost/patch-1 + +# 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: sykquxrt 93d83772 everyone +Parent commit      : orrkosyo 7fd1a60b master | (empty) Merge pull request #6 fr +om Spaceghost/patch-1 +... (output redacted) ... -# Inspect the result: +# Now set it on the change we worked on before: -$ jj log -◉  lqwsnlyv jjfan@example.com 2023-10-03 17:53:30.000 -07:00 goodbye d173a31f -│  goodbye -│ @  ppvvsuyx jjfan@example.com 2023-10-03 17:53:30.000 -07:00 0bfedc93 -├─╯  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 -~ +$ jj describe goodbye -m goodbye + +# Inspect the result: + +$ jj log +○  ttmypqzs jjfan@example.com 2024-09-04 19:21:14 goodbye 13c5fc55 +│  goodbye +│ @  sykquxrt jjfan@example.com 2024-09-04 19:21:14 93d83772 +├─╯  everyone +  orrkosyo octocat@nowhere.com 2012-03-06 16:06:50 master 7fd1a60b +│  (empty) Merge pull request #6 from Spaceghost/patch-1 +~