Skip to content

feat(record): add --before flag to insert commit before current HEAD - #1663

Draft
claytonrcarter wants to merge 4 commits into
arxanas:masterfrom
claytonrcarter:record-before
Draft

feat(record): add --before flag to insert commit before current HEAD#1663
claytonrcarter wants to merge 4 commits into
arxanas:masterfrom
claytonrcarter:record-before

Conversation

@claytonrcarter

Copy link
Copy Markdown
Collaborator

wip, currently includes #1612

@claytonrcarter claytonrcarter changed the title wip: record --before feat(record): add --before flag to insert commit before current HEAD May 19, 2026
@claytonrcarter
claytonrcarter force-pushed the record-before branch 4 times, most recently from 9f05cb2 to 045b245 Compare May 21, 2026 15:29
@claytonrcarter
claytonrcarter force-pushed the record-before branch 2 times, most recently from 413ca1d to 8abfb29 Compare July 10, 2026 02:30
Prep only, no logic changes yet.
Prep only, no logic changes. This sould make the next diff more concise.
When --before is used:
1. The commit C is created normally as a child of HEAD (B).
2. A c_alt commit is created in-memory as a child of B's parent (A),
   with the same tree and metadata as C.
3. A RewriteEvent records C as obsolete (replaced by c_alt).
4. `git reset --soft HEAD~` moves HEAD back to B, orphaning C and
   making it invisible in the DAG (preventing constraint cycles).
5. A rebase plan moves B to be a child of c_alt, yielding B'.

The result is A <- c_alt <- B', with HEAD and any branch tracking B'.

Four test cases covering the new --before behaviour:

- test_record_before: basic happy path - working-copy changes are
  inserted before HEAD as a new commit; HEAD (and its branch) advance
  to the rebased original HEAD.
- test_record_before_with_new: --new --before inserts an empty commit
  before HEAD and rebases HEAD on top of it.
- test_record_before_rewrite_public_commit: warns when HEAD is a public
  commit and prints a specific `git move` invocation to force-proceed.
- test_record_before_merge_conflict: conflict during the rebase of HEAD
  is surfaced with the Before remediation message.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant