Radish alpha
h
rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5
Radicle Heartwood Protocol & Stack
Radicle
Git
.. framework git workflow jj-config.md jj-init-bare.md jj-init-colocate.md rad-auth-errors.md rad-auth.md rad-block.md rad-checkout-repo-config-linux.md rad-checkout-repo-config-macos.md rad-checkout.md rad-clean.md rad-clone-all.md rad-clone-bare.md rad-clone-connect.md rad-clone-directory.md rad-clone-partial-fail.md rad-clone-scope.md rad-clone-unknown.md rad-clone.md rad-cob-log.md rad-cob-migrate.md rad-cob-multiset rad-cob-multiset.md rad-cob-operations.md rad-cob-show.md rad-cob-update-identity.md rad-cob-update.md rad-config.md rad-diff.md rad-fetch.md rad-fork.md rad-help.md rad-id-collaboration.md rad-id-conflict.md rad-id-multi-delegate.md rad-id-private.md rad-id-threshold-soft-fork.md rad-id-threshold.md rad-id-unauthorized-delegate.md rad-id-unknown-field.md rad-id-update-delete-field.md rad-id.md rad-inbox.md rad-init-detached-head.md rad-init-existing-bare.md rad-init-existing.md rad-init-no-git.md rad-init-no-seed.md rad-init-private-clone-seed.md rad-init-private-clone.md rad-init-private-no-seed.md rad-init-private-seed.md rad-init-private.md rad-init-sync-not-connected.md rad-init-sync-preferred.md rad-init-sync-timeout.md rad-init-sync.md rad-init-with-existing-remote.md rad-init.md rad-inspect-noauth.md rad-inspect.md rad-issue-list.md rad-issue.md rad-key-mismatch.md rad-merge-after-update.md rad-merge-no-ff.md rad-merge-via-push.md rad-node.md rad-patch-ahead-behind.md rad-patch-change-base.md rad-patch-checkout-force.md rad-patch-checkout-revision.md rad-patch-checkout.md rad-patch-delete.md rad-patch-detached-head.md rad-patch-diff.md rad-patch-draft.md rad-patch-edit.md rad-patch-fetch-1.md rad-patch-fetch-2.md rad-patch-jj.md rad-patch-merge-draft.md rad-patch-open-explore.md rad-patch-pull-update.md rad-patch-revert-merge.md rad-patch-update.md rad-patch-via-push.md rad-patch.md rad-publish.md rad-push-and-pull-patches.md rad-remote.md rad-review-by-hunk.md rad-seed-and-follow.md rad-seed-many.md rad-seed-policy-allow-no-scope.md rad-seed-scope.md rad-self.md rad-sync-without-node.md rad-sync.md rad-unseed-many.md rad-unseed.md rad-warn-old-nodes.md rad-watch.md
heartwood crates radicle-cli examples rad-merge-via-push.md

Let’s start by creating two patches.

$ git checkout -b feature/1 -q
$ git commit --allow-empty -m "First change"
[feature/1 20aa5dd] First change
$ git push rad HEAD:refs/patches
✓ Patch 696ec5508494692899337afe6713fe1796d0315c opened
To rad://z42hL2jL4XNk6K8oHQaSWfMgCL7ji/z6MknSLrJoTcukLrE435hVNQT4JUhbvWLX4kUzqkEStBU8Vi
 * [new reference]   HEAD -> refs/patches
$ git checkout -b feature/2 -q master
$ git commit --allow-empty -m "Second change"
[feature/2 daf349f] Second change
$ git push rad HEAD:refs/patches
✓ Patch 356f73863a8920455ff6e77cd9c805d68910551b opened
To rad://z42hL2jL4XNk6K8oHQaSWfMgCL7ji/z6MknSLrJoTcukLrE435hVNQT4JUhbvWLX4kUzqkEStBU8Vi
 * [new reference]   HEAD -> refs/patches

This creates some remote tracking branches for us:

$ git branch -r
  rad/master
  rad/patches/356f73863a8920455ff6e77cd9c805d68910551b
  rad/patches/696ec5508494692899337afe6713fe1796d0315c

And some remote refs:

$ rad inspect --refs
z6MknSLrJoTcukLrE435hVNQT4JUhbvWLX4kUzqkEStBU8Vi
└── refs
    ├── cobs
    │   ├── xyz.radicle.id
    │   │   └── 0656c217f917c3e06234771e9ecae53aba5e173e
    │   └── xyz.radicle.patch
    │       ├── 356f73863a8920455ff6e77cd9c805d68910551b
    │       └── 696ec5508494692899337afe6713fe1796d0315c
    ├── heads
    │   ├── master
    │   └── patches
    │       ├── 356f73863a8920455ff6e77cd9c805d68910551b
    │       └── 696ec5508494692899337afe6713fe1796d0315c
    └── rad
        ├── id
        ├── root
        └── sigrefs

Then let’s merge the changes into master.

$ git checkout master
Switched to branch 'master'
$ git merge feature/1
$ git merge feature/2

When we push to rad/master, we automatically merge the patches:

$ git push rad master
✓ Patch 356f73863a8920455ff6e77cd9c805d68910551b merged
✓ Patch 696ec5508494692899337afe6713fe1796d0315c merged
✓ Canonical reference refs/heads/master updated to target commit d6399c71702b40bae00825b3c444478d06b4e91c
To rad://z42hL2jL4XNk6K8oHQaSWfMgCL7ji/z6MknSLrJoTcukLrE435hVNQT4JUhbvWLX4kUzqkEStBU8Vi
   f2de534..d6399c7  master -> master
$ rad patch --merged
╭─────────────────────────────────────────────────────────────────────────────╮
│ ●  ID       Title          Author         Reviews  Head     +   -   Updated │
├─────────────────────────────────────────────────────────────────────────────┤
│ ✓  [ ... ]  Second change  alice   (you)  -        daf349f  +0  -0  now     │
│ ✓  [ ... ]  First change   alice   (you)  -        20aa5dd  +0  -0  now     │
╰─────────────────────────────────────────────────────────────────────────────╯
$ rad patch show 696ec5508494692899337afe6713fe1796d0315c
╭──────────────────────────────────────────────────────────╮
│ Title     First change                                   │
│ Patch     696ec5508494692899337afe6713fe1796d0315c       │
│ Author    alice (you)                                    │
│ Head      20aa5dde6210796c3a2f04079b42316a31d02689       │
│ Base      [..                                    ]       │
│ Branches  feature/1                                      │
│ Commits   ahead 0, behind 2                              │
│ Status    merged                                         │
├──────────────────────────────────────────────────────────┤
│ 20aa5dd First change                                     │
├──────────────────────────────────────────────────────────┤
│ ● Revision 696ec55 @ [..   ]..20aa5dd by alice (you) now │
│   └─ ✓ merged                         by alice (you)     │
╰──────────────────────────────────────────────────────────╯
$ rad patch show 356f73863a8920455ff6e77cd9c805d68910551b
╭──────────────────────────────────────────────────────────╮
│ Title     Second change                                  │
│ Patch     356f73863a8920455ff6e77cd9c805d68910551b       │
│ Author    alice (you)                                    │
│ Head      daf349ff76bedf48c5f292290b682ee7be0683cf       │
│ Base      [..                                    ]       │
│ Branches  feature/2                                      │
│ Commits   ahead 0, behind 2                              │
│ Status    merged                                         │
├──────────────────────────────────────────────────────────┤
│ daf349f Second change                                    │
├──────────────────────────────────────────────────────────┤
│ ● Revision 356f738 @ [..   ]..daf349f by alice (you) now │
│   └─ ✓ merged                         by alice (you)     │
╰──────────────────────────────────────────────────────────╯

We can verify that the remote tracking branches were also deleted:

$ git branch -r
  rad/master

And so were the remote branches:

$ rad inspect --refs
z6MknSLrJoTcukLrE435hVNQT4JUhbvWLX4kUzqkEStBU8Vi
└── refs
    ├── cobs
    │   ├── xyz.radicle.id
    │   │   └── 0656c217f917c3e06234771e9ecae53aba5e173e
    │   └── xyz.radicle.patch
    │       ├── 356f73863a8920455ff6e77cd9c805d68910551b
    │       └── 696ec5508494692899337afe6713fe1796d0315c
    ├── heads
    │   └── master
    └── rad
        ├── id
        ├── root
        └── sigrefs

Finally, let’s check that we can revert the second patch without affecting the first patch, even though they were pushed together.

$ git reset --hard HEAD^
$ git push -f rad
! Patch 356f73863a8920455ff6e77cd9c805d68910551b reverted at revision 356f738
✓ Canonical reference refs/heads/master updated to target commit 20aa5dde6210796c3a2f04079b42316a31d02689
To rad://z42hL2jL4XNk6K8oHQaSWfMgCL7ji/z6MknSLrJoTcukLrE435hVNQT4JUhbvWLX4kUzqkEStBU8Vi
 + d6399c7...20aa5dd master -> master (forced update)
$ rad patch --all
╭─────────────────────────────────────────────────────────────────────────────╮
│ ●  ID       Title          Author         Reviews  Head     +   -   Updated │
├─────────────────────────────────────────────────────────────────────────────┤
│ ●  356f738  Second change  alice   (you)  -        daf349f  +0  -0  now     │
│ ✓  696ec55  First change   alice   (you)  -        20aa5dd  +0  -0  now     │
╰─────────────────────────────────────────────────────────────────────────────╯
Let's start by creating two patches.

```
$ git checkout -b feature/1 -q
$ git commit --allow-empty -m "First change"
[feature/1 20aa5dd] First change
```
``` (stderr) RAD_SOCKET=/dev/null
$ git push rad HEAD:refs/patches
✓ Patch 696ec5508494692899337afe6713fe1796d0315c opened
To rad://z42hL2jL4XNk6K8oHQaSWfMgCL7ji/z6MknSLrJoTcukLrE435hVNQT4JUhbvWLX4kUzqkEStBU8Vi
 * [new reference]   HEAD -> refs/patches
```
```
$ git checkout -b feature/2 -q master
$ git commit --allow-empty -m "Second change"
[feature/2 daf349f] Second change
```
``` (stderr) RAD_SOCKET=/dev/null
$ git push rad HEAD:refs/patches
✓ Patch 356f73863a8920455ff6e77cd9c805d68910551b opened
To rad://z42hL2jL4XNk6K8oHQaSWfMgCL7ji/z6MknSLrJoTcukLrE435hVNQT4JUhbvWLX4kUzqkEStBU8Vi
 * [new reference]   HEAD -> refs/patches
```

This creates some remote tracking branches for us:

```
$ git branch -r
  rad/master
  rad/patches/356f73863a8920455ff6e77cd9c805d68910551b
  rad/patches/696ec5508494692899337afe6713fe1796d0315c
```

And some remote refs:

```
$ rad inspect --refs
z6MknSLrJoTcukLrE435hVNQT4JUhbvWLX4kUzqkEStBU8Vi
└── refs
    ├── cobs
    │   ├── xyz.radicle.id
    │   │   └── 0656c217f917c3e06234771e9ecae53aba5e173e
    │   └── xyz.radicle.patch
    │       ├── 356f73863a8920455ff6e77cd9c805d68910551b
    │       └── 696ec5508494692899337afe6713fe1796d0315c
    ├── heads
    │   ├── master
    │   └── patches
    │       ├── 356f73863a8920455ff6e77cd9c805d68910551b
    │       └── 696ec5508494692899337afe6713fe1796d0315c
    └── rad
        ├── id
        ├── root
        └── sigrefs
```

Then let's merge the changes into `master`.

``` (stderr) RAD_SOCKET=/dev/null
$ git checkout master
Switched to branch 'master'
$ git merge feature/1
$ git merge feature/2
```

When we push to `rad/master`, we automatically merge the patches:

``` (stderr) RAD_SOCKET=/dev/null
$ git push rad master
✓ Patch 356f73863a8920455ff6e77cd9c805d68910551b merged
✓ Patch 696ec5508494692899337afe6713fe1796d0315c merged
✓ Canonical reference refs/heads/master updated to target commit d6399c71702b40bae00825b3c444478d06b4e91c
To rad://z42hL2jL4XNk6K8oHQaSWfMgCL7ji/z6MknSLrJoTcukLrE435hVNQT4JUhbvWLX4kUzqkEStBU8Vi
   f2de534..d6399c7  master -> master
```
```
$ rad patch --merged
╭─────────────────────────────────────────────────────────────────────────────╮
│ ●  ID       Title          Author         Reviews  Head     +   -   Updated │
├─────────────────────────────────────────────────────────────────────────────┤
│ ✓  [ ... ]  Second change  alice   (you)  -        daf349f  +0  -0  now     │
│ ✓  [ ... ]  First change   alice   (you)  -        20aa5dd  +0  -0  now     │
╰─────────────────────────────────────────────────────────────────────────────╯
$ rad patch show 696ec5508494692899337afe6713fe1796d0315c
╭──────────────────────────────────────────────────────────╮
│ Title     First change                                   │
│ Patch     696ec5508494692899337afe6713fe1796d0315c       │
│ Author    alice (you)                                    │
│ Head      20aa5dde6210796c3a2f04079b42316a31d02689       │
│ Base      [..                                    ]       │
│ Branches  feature/1                                      │
│ Commits   ahead 0, behind 2                              │
│ Status    merged                                         │
├──────────────────────────────────────────────────────────┤
│ 20aa5dd First change                                     │
├──────────────────────────────────────────────────────────┤
│ ● Revision 696ec55 @ [..   ]..20aa5dd by alice (you) now │
│   └─ ✓ merged                         by alice (you)     │
╰──────────────────────────────────────────────────────────╯
$ rad patch show 356f73863a8920455ff6e77cd9c805d68910551b
╭──────────────────────────────────────────────────────────╮
│ Title     Second change                                  │
│ Patch     356f73863a8920455ff6e77cd9c805d68910551b       │
│ Author    alice (you)                                    │
│ Head      daf349ff76bedf48c5f292290b682ee7be0683cf       │
│ Base      [..                                    ]       │
│ Branches  feature/2                                      │
│ Commits   ahead 0, behind 2                              │
│ Status    merged                                         │
├──────────────────────────────────────────────────────────┤
│ daf349f Second change                                    │
├──────────────────────────────────────────────────────────┤
│ ● Revision 356f738 @ [..   ]..daf349f by alice (you) now │
│   └─ ✓ merged                         by alice (you)     │
╰──────────────────────────────────────────────────────────╯
```

We can verify that the remote tracking branches were also deleted:

```
$ git branch -r
  rad/master
```

And so were the remote branches:

```
$ rad inspect --refs
z6MknSLrJoTcukLrE435hVNQT4JUhbvWLX4kUzqkEStBU8Vi
└── refs
    ├── cobs
    │   ├── xyz.radicle.id
    │   │   └── 0656c217f917c3e06234771e9ecae53aba5e173e
    │   └── xyz.radicle.patch
    │       ├── 356f73863a8920455ff6e77cd9c805d68910551b
    │       └── 696ec5508494692899337afe6713fe1796d0315c
    ├── heads
    │   └── master
    └── rad
        ├── id
        ├── root
        └── sigrefs
```

Finally, let's check that we can revert the second patch without affecting
the first patch, even though they were pushed together.

``` (stderr) RAD_SOCKET=/dev/null
$ git reset --hard HEAD^
$ git push -f rad
! Patch 356f73863a8920455ff6e77cd9c805d68910551b reverted at revision 356f738
✓ Canonical reference refs/heads/master updated to target commit 20aa5dde6210796c3a2f04079b42316a31d02689
To rad://z42hL2jL4XNk6K8oHQaSWfMgCL7ji/z6MknSLrJoTcukLrE435hVNQT4JUhbvWLX4kUzqkEStBU8Vi
 + d6399c7...20aa5dd master -> master (forced update)
```
```
$ rad patch --all
╭─────────────────────────────────────────────────────────────────────────────╮
│ ●  ID       Title          Author         Reviews  Head     +   -   Updated │
├─────────────────────────────────────────────────────────────────────────────┤
│ ●  356f738  Second change  alice   (you)  -        daf349f  +0  -0  now     │
│ ✓  696ec55  First change   alice   (you)  -        20aa5dd  +0  -0  now     │
╰─────────────────────────────────────────────────────────────────────────────╯
```