git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 0/8] history: introduce "split" subcommand

From
Patrick Steinhardt <ps@pks.im>
Date
Mar 2, 2026, 12:13 UTC
Message-ID
<20260302-pks-history-split-v1-0-444fc987a324@pks.im>
Hi,

this patch series introduces `git history split` as an easy way to split up one commit into multiple commits. This subcommand has already been introduced in earlier versions of my git-history(1) patch series, but I eventually decided to evict them from this series so that we can rather focus more on basic decisions.

In any case, the current version of this patch series matches (to the best of my knowledge) the latest agreements on the mailing list around its behaviour. Most importantly:

  - It will ask for commit messages for both commits, not only the first
    commit, which has been a bit of a discussion point.
  - It is not possible to edit hunks. This results in a mode where
    conflicts are not possible as the tree of the second commit will
    always match the tree of the original commit. Conflict handling for
    subsequent subcommands will be a bigger topic, as it probably
    depends on support for first-class conflicts.
  - We also update dependent branches, same as with the latest iteration
    of `git history reword`.

The patch series is built on top of 2cc7191751 (The 8th batch, 2026-02-27) with aa/add-p-no-auto-advance at 417b181f99 (add-patch: allow interfile navigation when selecting hunks, 2026-02-14) merged into it.

Thanks!
Patrick
---
Patrick Steinhardt (8):
      add-patch: split out header from "add-interactive.h"
      add-patch: split out `struct interactive_options`
      add-patch: remove dependency on "add-interactive" subsystem
      add-patch: add support for in-memory index patching
      add-patch: allow disabling editing of hunks
      cache-tree: allow writing in-memory index as tree
      builtin/history: split out extended function to create commits
      builtin/history: implement "split" subcommand
 Documentation/git-history.adoc |  62 ++++
 add-interactive.c              | 177 ++--------
 add-interactive.h              |  48 +--
 add-patch.c                    | 363 ++++++++++++++++----
 add-patch.h                    |  74 ++++
 builtin/add.c                  |  26 +-
 builtin/checkout.c             |   9 +-
 builtin/commit.c               |  16 +-
 builtin/history.c              | 317 +++++++++++++++--
 builtin/reset.c                |  20 +-
 builtin/stash.c                |  54 +--
 cache-tree.c                   |   4 +-
 cache-tree.h                   |   3 +-
 commit.h                       |   2 +-
 t/meson.build                  |   1 +
 t/t3452-history-split.sh       | 757 +++++++++++++++++++++++++++++++++++++++++
 16 files changed, 1592 insertions(+), 341 deletions(-)

--- base-commit: caec355702b7a86dadec53344ba65ae33558cfa8 change-id: 20260202-pks-history-split-fb3a93df61ba

Next: Patrick Steinhardt
Message 1 of 16 in “history: introduce "split" subcommand”
  1. 0/8 history: introduce "split" subcommandPatrick Steinhardt, Mar 2, 2026
  2. 1/8 add-patch: split out header from "add-interactive.h"Patrick Steinhardt, Mar 2, 2026
  3. 2/8 add-patch: split out `struct interactive_options`Patrick Steinhardt, Mar 2, 2026
  4. 3/8 add-patch: remove dependency on "add-interactive" subsystemPatrick Steinhardt, Mar 2, 2026
  5. 4/8 add-patch: add support for in-memory index patchingPatrick Steinhardt, Mar 2, 2026
  6. 5/8 add-patch: allow disabling editing of hunksPatrick Steinhardt, Mar 2, 2026
  7. 6/8 cache-tree: allow writing in-memory index as treePatrick Steinhardt, Mar 2, 2026
  8. 7/8 builtin/history: split out extended function to create commitsPatrick Steinhardt, Mar 2, 2026
  9. D. Ben KnobleMar 3, 2026
  10. Patrick SteinhardtMar 11, 2026
  11. 8/8 builtin/history: implement "split" subcommandPatrick Steinhardt, Mar 2, 2026
  12. D. Ben KnobleMar 3, 2026
  13. Patrick SteinhardtMar 11, 2026
  14. D. Ben KnobleMar 3, 2026
  15. Junio C HamanoMar 13, 2026
  16. Patrick SteinhardtMar 16, 2026

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.