Skip to main content

Scenario: diverged-then-pulled

Both sides changed different files, then upstream's change was pulled in. The local change is still waiting to be pushed. b adds local.txt, l adds upstream.txt, and the pull, e, merged cleanly.

The pull's folder differs from l, the commit it records: it contains local.txt. So B stays at the clone, and the push rebuilds the pull as a merge, and the local commit keeps its own identity upstream.

Output​

setup.bash builds this state:

$ build_scenario scenario_diverged_then_pulled

The monorepo commits a, b and the pull e, with B at a; upstream k and l, T; the rebuild b prime on top of k, and e prime, R, a merge of b prime and l

$ git splice status
On branch main

ahead 2 vendor/a
$ git splice log
=== vendor/a (main)
< 1c41ddd splice: pull vendor/a from main at 9887ec6 (Test <test@example.com>)
< c013d32 local change (Test <test@example.com>)
$ git splice push vendor/a
ok vendor/a: pushed 1c41ddd to main
$ git -C "$UPSTREAM" log --graph --format=%s main
* splice: pull vendor/a from main at 9887ec6
|\
| * upstream change
* | local change
|/
* seed