Assuming Bob is locked and Jane wants to move the problem, Jane does her best to complete the merge.
$ git fetch
$ git checkout R2
$ git merge --ff-only origin / R2
$ git checkout -b wip / R2-with-R1
Above the napkin stands for work in progress, and this is an agreement that informs the team that wood and history are subject to radical changes. Perhaps Jane really wants Bob to take a look at her resolutions, which affect his code from R1, before integrating them into the baseline. (Note: this is an anti-pattern, the best approach is automated tests that protect the desired behavior for new code in R1 and allow developers other than Bob to merge confidently.)
Jane is doing her best to merge.
$ git merge origin / R1
$ hack
$ git add ..
$ hack
$ git add ..
The wip / R2-with-R1 splitter can even contain multiple checkpoint-style transactions. Another good signal for everyone who will contain it will allow the team to understand that it is speculative.
$ git commit -m 'FIXME: fix conflicts in Potrzebie'
When she is ready for Bob to look at her, she pushes her into the vault, which they can see as
$ git push --set-upstream origin wip / R2-with-R1
The --set-upstream option is if they should work together on a new branch.
She then launches her mail user agent.
To: Bob
From: jane
Subject: speculative merge: wip / R2-with-R1
Bob: please look over my attempted merge in the subject branch and make
any necessary fixes that I may have overlooked.
I am particularly concerned about my Potrzebie conflict-resolutions.
Changes there always seem to bite us one way or the other.
Thanks,
Jane
After Bobs corrects and retrieves, the story will resemble
$ git lola
* 77d472c (origin / wip / R2-with-R1) fix by Bob
* ba1eb24 (HEAD, wip / R2-with-R1) FIXME: merge 2
* 80c207d FIXME: merge 1
| \ |
| * 2cf6ad4 (origin / R1, R1) R1 # 2
* | 137b39d (origin / R2, R2) R2 # 2
* | cb9a761 R2
...
At this point, Jane wants to keep the merger, but does not want to keep the ugly checkpoint. Twisting back to fixing a merge requires a bit of care.
$ echo Merge R1 into R2 | \
git commit-tree origin / wip / R2-with-R1 ^ {tree} \
-p $ (git rev-parse origin / R1) -p $ (git rev-parse origin / R2)
84b177c498bc635612b66932f3d41096999e6d3f
$ git checkout R2
Switched to branch 'R2'
$ git merge --ff-only 84b177c498bc635612b66932f3d41096999e6d3f
Updating 137b39d..84b177c
Fast forward
... It leaves a story
$ git lola
* 84b177c (HEAD, R2) Merge R1 into R2
| \ |
| | * 77d472c (origin / wip / R2-with-R1) fix by Bob
| | * ba1eb24 FIXME: merge 2
| | * 80c207d (wip / R2-with-R1) FIXME: merge 1
| | | \ |
| | / /
| | /
| | /
| / |
* | 2cf6ad4 (origin / R1, R1) R1 # 2
| * 137b39d (origin / R2) R2 # 2
| * cb9a761 R2
...
and R2 now has the same tree by construction as the final Bobs tree.