···4slug: pulls
5title: the lifecycle of a pull request
6subtitle: we shipped a bunch of PR features recently; here's how we built it
7-date: 2025-04-15
08authors:
9 - name: Anirudh
10 email: anirudh@tangled.sh
···4344<figure class="max-w-[550px] m-auto flex flex-col items-center justify-center">
45 <img class="h-auto max-w-full" src="/static/img/merge-base.png">
46- <figcaption class="text-center">Merge base caption here! [!!!change this!]</figcaption>
047</figure>
4849Your `feature` branch has advanced 2 commits since you first
···512 commits. Doing a trivial `git diff feature main` will
52produce a confusing patch:
5354-- the patch will apply the changes from X and Y
55-- the patch will **revert** the changes from B and C
5657We obviously do not want the second part! To only show the
58changes added by `feature`, we have to identify the
···67### ref comparisons across forks
6869The plumbing described above is easy to do across two
70-branches, but what about forks? and what if they live on
71-different servers altogether (as they can in tangled!)?
7273Here's the concept: since we already have all the necessary
74components to compare two local refs, why not simply
···172173* Change ID support: This will allow us to group changes
174 together and track them across multiple commits, and to
175- provide "history" for each change. This works great with
176- `jujutsu`.
0000
···4slug: pulls
5title: the lifecycle of a pull request
6subtitle: we shipped a bunch of PR features recently; here's how we built it
7+date: 2025-04-16
8+image: /static/img/hidden-ref.png
9authors:
10 - name: Anirudh
11 email: anirudh@tangled.sh
···4445<figure class="max-w-[550px] m-auto flex flex-col items-center justify-center">
46 <img class="h-auto max-w-full" src="/static/img/merge-base.png">
47+ <figcaption class="text-center"><code>A</code> is the merge-base for
48+<code>feature</code> and <code>main</code>.</figcaption>
49</figure>
5051Your `feature` branch has advanced 2 commits since you first
···532 commits. Doing a trivial `git diff feature main` will
54produce a confusing patch:
5556+- the patch will apply the changes from `X` and `Y`
57+- the patch will **revert** the changes from `B` and `C`
5859We obviously do not want the second part! To only show the
60changes added by `feature`, we have to identify the
···69### ref comparisons across forks
7071The plumbing described above is easy to do across two
72+branches, but what about forks? And what if they live on
73+different servers altogether (as they can in Tangled!)?
7475Here's the concept: since we already have all the necessary
76components to compare two local refs, why not simply
···174175* Change ID support: This will allow us to group changes
176 together and track them across multiple commits, and to
177+ provide "history" for each change. This works great with [Jujutsu][jj].
178+179+Oh and lastly, we have a [Discord](https://discord.gg/W7SRR4xHhd). We'll
180+see you there!
181+182+[jj]: https://jj-vcs.github.io/jj/latest/